{
  "x402Version": 2,
  "name": "AgentBodega",
  "description": "Pay-per-call agent utility APIs.",
  "layout": {
    "bodega": {
      "id": "agentbodega",
      "name": "AgentBodega"
    },
    "hierarchy": [
      "department",
      "aisle",
      "shelf",
      "offering"
    ],
    "requiredLevels": [
      "department",
      "aisle",
      "offering"
    ],
    "optionalLevels": [
      "shelf"
    ],
    "idFormat": "stable-slug",
    "sourceOfTruth": "src/catalog/taxonomy.ts",
    "taxonomyEndpoint": "/api/taxonomy",
    "note": "AgentBodega is the single store root. Each offering carries stable department, aisle, optional shelf, and offering IDs; shelves are optional and only appear when they add useful grouping."
  },
  "openapi": "https://agentbodega.store/openapi.json",
  "summaryOpenapi": "https://agentbodega.store/openapi.summary.json",
  "taxonomy": "https://agentbodega.store/api/taxonomy",
  "storefront": "https://agentbodega.store/api/storefront",
  "surface": {
    "label": "Full Catalog",
    "mode": "full",
    "filters": {},
    "discovery": "https://agentbodega.store/.well-known/x402",
    "paidRouteCount": 71,
    "totalPaidRouteCount": 71,
    "fullCatalog": "https://agentbodega.store/.well-known/x402"
  },
  "resources": [
    {
      "resource": "https://agentbodega.store/api/inspect/x402",
      "type": "http",
      "x402Version": 2,
      "serviceName": "x402 Endpoint Inspector",
      "description": "Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.",
      "longDescription": "Purpose: Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nBest use: Use this when an agent needs inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: method, headers, body, timeoutMs.\n\nAccepted fields:\n- url (required, string): Url value for x402 Endpoint Inspector. Constraints: format: uri. Constraints: format: uri.\n- method (optional, string): Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".\n- headers (optional, object): Headers object for configuring x402 Endpoint Inspector.\n- body (optional, object): Body object for configuring x402 Endpoint Inspector.\n- timeoutMs (optional, integer): Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000. Constraints: default: 5000; min: 500; max: 8000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com/api/paid\"\n}\n```",
      "category": "x402-tools",
      "kind": "http-json",
      "departmentId": "x402-tools",
      "department": "x402 Tools",
      "aisleId": "payment-discovery",
      "aisle": "Payment Discovery",
      "shelfId": "endpoint-inspection",
      "shelf": "Endpoint Inspection",
      "offeringId": "x402-inspector",
      "offering": "x402 Endpoint Inspector",
      "pathIds": [
        "x402-tools",
        "payment-discovery",
        "endpoint-inspection",
        "x402-inspector"
      ],
      "pathLabels": [
        "x402 Tools",
        "Payment Discovery",
        "Endpoint Inspection",
        "x402 Endpoint Inspector"
      ],
      "taxonomyPath": "x402-tools.payment-discovery.endpoint-inspection.x402-inspector",
      "layout": {
        "department": {
          "id": "x402-tools",
          "name": "x402 Tools"
        },
        "aisle": {
          "id": "payment-discovery",
          "name": "Payment Discovery"
        },
        "shelf": {
          "id": "endpoint-inspection",
          "name": "Endpoint Inspection"
        },
        "offering": {
          "id": "x402-inspector",
          "name": "x402 Endpoint Inspector"
        },
        "pathIds": [
          "x402-tools",
          "payment-discovery",
          "endpoint-inspection",
          "x402-inspector"
        ],
        "pathLabels": [
          "x402 Tools",
          "Payment Discovery",
          "Endpoint Inspection",
          "x402 Endpoint Inspector"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "x402",
        "inspection",
        "agent-tools",
        "bazaar",
        "openapi"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri."
          },
          "method": {
            "type": "string",
            "enum": [
              "GET",
              "HEAD",
              "POST"
            ],
            "default": "GET",
            "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\"."
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Headers object for configuring x402 Endpoint Inspector."
          },
          "body": {
            "type": "object",
            "additionalProperties": true,
            "description": "Body object for configuring x402 Endpoint Inspector."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 500,
            "maximum": 8000,
            "default": 5000,
            "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "method",
          "headers",
          "body",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "method",
            "type": "string",
            "required": false,
            "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".",
            "constraints": {
              "enum": [
                "GET",
                "HEAD",
                "POST"
              ],
              "default": "GET"
            }
          },
          {
            "name": "headers",
            "type": "object",
            "required": false,
            "description": "Headers object for configuring x402 Endpoint Inspector."
          },
          {
            "name": "body",
            "type": "object",
            "required": false,
            "description": "Body object for configuring x402 Endpoint Inspector."
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000.",
            "constraints": {
              "default": 5000,
              "minimum": 500,
              "maximum": 8000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com/api/paid"
        }
      },
      "exampleRequest": {
        "url": "https://example.com/api/paid"
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "paymentRequired": true,
        "status": 402,
        "metadataQuality": {
          "score": 100
        },
        "discovery": {
          "x402": {
            "status": 200
          },
          "openapi": {
            "status": 200
          }
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com/api/paid"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "paymentRequired": true,
                "status": 402,
                "metadataQuality": {
                  "score": 100
                },
                "discovery": {
                  "x402": {
                    "status": 200
                  },
                  "openapi": {
                    "status": 200
                  }
                }
              }
            }
          },
          "routeTemplate": "/api/inspect/x402",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri."
                      },
                      "method": {
                        "type": "string",
                        "enum": [
                          "GET",
                          "HEAD",
                          "POST"
                        ],
                        "default": "GET",
                        "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\"."
                      },
                      "headers": {
                        "type": "object",
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "Headers object for configuring x402 Endpoint Inspector."
                      },
                      "body": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Body object for configuring x402 Endpoint Inspector."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 500,
                        "maximum": 8000,
                        "default": 5000,
                        "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x402-inspector",
            "url": "https://agentbodega.store/api/inspect/x402",
            "method": "POST",
            "description": "Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.",
            "longDescription": "Purpose: Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nBest use: Use this when an agent needs inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: method, headers, body, timeoutMs.\n\nAccepted fields:\n- url (required, string): Url value for x402 Endpoint Inspector. Constraints: format: uri. Constraints: format: uri.\n- method (optional, string): Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".\n- headers (optional, object): Headers object for configuring x402 Endpoint Inspector.\n- body (optional, object): Body object for configuring x402 Endpoint Inspector.\n- timeoutMs (optional, integer): Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000. Constraints: default: 5000; min: 500; max: 8000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com/api/paid\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "x402 Endpoint Inspector",
            "category": "x402-tools",
            "kind": "http-json",
            "tags": [
              "x402",
              "inspection",
              "agent-tools",
              "bazaar",
              "openapi"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "method",
                "headers",
                "body",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "method",
                  "type": "string",
                  "required": false,
                  "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".",
                  "constraints": {
                    "enum": [
                      "GET",
                      "HEAD",
                      "POST"
                    ],
                    "default": "GET"
                  }
                },
                {
                  "name": "headers",
                  "type": "object",
                  "required": false,
                  "description": "Headers object for configuring x402 Endpoint Inspector."
                },
                {
                  "name": "body",
                  "type": "object",
                  "required": false,
                  "description": "Body object for configuring x402 Endpoint Inspector."
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000.",
                  "constraints": {
                    "default": 5000,
                    "minimum": 500,
                    "maximum": 8000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com/api/paid"
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri."
                },
                "method": {
                  "type": "string",
                  "enum": [
                    "GET",
                    "HEAD",
                    "POST"
                  ],
                  "default": "GET",
                  "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\"."
                },
                "headers": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Headers object for configuring x402 Endpoint Inspector."
                },
                "body": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Body object for configuring x402 Endpoint Inspector."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 500,
                  "maximum": 8000,
                  "default": 5000,
                  "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/inspect/x402",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/inspect/x402",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "x402-tools",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "x402-tools",
          "department": "x402 Tools",
          "aisleId": "payment-discovery",
          "aisle": "Payment Discovery",
          "shelfId": "endpoint-inspection",
          "shelf": "Endpoint Inspection",
          "offeringId": "x402-inspector",
          "offering": "x402 Endpoint Inspector",
          "pathIds": [
            "x402-tools",
            "payment-discovery",
            "endpoint-inspection",
            "x402-inspector"
          ],
          "pathLabels": [
            "x402 Tools",
            "Payment Discovery",
            "Endpoint Inspection",
            "x402 Endpoint Inspector"
          ],
          "taxonomyPath": "x402-tools.payment-discovery.endpoint-inspection.x402-inspector",
          "layout": {
            "department": {
              "id": "x402-tools",
              "name": "x402 Tools"
            },
            "aisle": {
              "id": "payment-discovery",
              "name": "Payment Discovery"
            },
            "shelf": {
              "id": "endpoint-inspection",
              "name": "Endpoint Inspection"
            },
            "offering": {
              "id": "x402-inspector",
              "name": "x402 Endpoint Inspector"
            },
            "pathIds": [
              "x402-tools",
              "payment-discovery",
              "endpoint-inspection",
              "x402-inspector"
            ],
            "pathLabels": [
              "x402 Tools",
              "Payment Discovery",
              "Endpoint Inspection",
              "x402 Endpoint Inspector"
            ]
          }
        },
        "description": {
          "short": "Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.",
          "full": "Purpose: Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nBest use: Use this when an agent needs inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: method, headers, body, timeoutMs.\n\nAccepted fields:\n- url (required, string): Url value for x402 Endpoint Inspector. Constraints: format: uri. Constraints: format: uri.\n- method (optional, string): Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".\n- headers (optional, object): Headers object for configuring x402 Endpoint Inspector.\n- body (optional, object): Body object for configuring x402 Endpoint Inspector.\n- timeoutMs (optional, integer): Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000. Constraints: default: 5000; min: 500; max: 8000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com/api/paid\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri."
            },
            "method": {
              "type": "string",
              "enum": [
                "GET",
                "HEAD",
                "POST"
              ],
              "default": "GET",
              "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\"."
            },
            "headers": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Headers object for configuring x402 Endpoint Inspector."
            },
            "body": {
              "type": "object",
              "additionalProperties": true,
              "description": "Body object for configuring x402 Endpoint Inspector."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 500,
              "maximum": 8000,
              "default": 5000,
              "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri."
            },
            "method": {
              "type": "string",
              "enum": [
                "GET",
                "HEAD",
                "POST"
              ],
              "default": "GET",
              "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\"."
            },
            "headers": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Headers object for configuring x402 Endpoint Inspector."
            },
            "body": {
              "type": "object",
              "additionalProperties": true,
              "description": "Body object for configuring x402 Endpoint Inspector."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 500,
              "maximum": 8000,
              "default": 5000,
              "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "method",
            "headers",
            "body",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "method",
              "type": "string",
              "required": false,
              "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".",
              "constraints": {
                "enum": [
                  "GET",
                  "HEAD",
                  "POST"
                ],
                "default": "GET"
              }
            },
            {
              "name": "headers",
              "type": "object",
              "required": false,
              "description": "Headers object for configuring x402 Endpoint Inspector."
            },
            {
              "name": "body",
              "type": "object",
              "required": false,
              "description": "Body object for configuring x402 Endpoint Inspector."
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000.",
              "constraints": {
                "default": 5000,
                "minimum": 500,
                "maximum": 8000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com/api/paid"
          }
        },
        "exampleRequest": {
          "url": "https://example.com/api/paid"
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "paymentRequired": true,
          "status": 402,
          "metadataQuality": {
            "score": 100
          },
          "discovery": {
            "x402": {
              "status": 200
            },
            "openapi": {
              "status": 200
            }
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/catalog",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Public Data Catalog",
      "description": "Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.",
      "longDescription": "Purpose: Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nBest use: Use this when an agent needs return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, category, name, includeSchemas, limit.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against endpoint name, title, category, description, tags, and path.\n- category (optional, string): Optional Public Data department/category to return. Constraints: accepted values: \"catalog\", \"workflow-bundles\", \"cached-results\", \"recurring-monitoring\", \"discovery-verification\", \"data-enrichment\", \"marketplace-listings\", \"real-estate-rentals\", \"ecommerce-products-reviews\", \"health-prices\", \"jobs-hiring\", \"facebook-data\", \"social-video-intelligence\", \"news\", \"public-records\".\n- name (optional, string): Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads.\n- includeSchemas (optional, boolean): Include each endpoint's full input and output schemas. Constraints: default: true.\n- limit (optional, integer): Maximum number of endpoints to return after filters. Constraints: default: 28; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"category\": \"public-records\",\n  \"includeSchemas\": true,\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "department-catalog",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "catalog",
      "aisle": "Catalog",
      "shelfId": "catalog",
      "shelf": "Catalog",
      "offeringId": "public-data-catalog",
      "offering": "Public Data Catalog",
      "pathIds": [
        "public-data",
        "catalog",
        "catalog",
        "public-data-catalog"
      ],
      "pathLabels": [
        "Public Data",
        "Catalog",
        "Catalog",
        "Public Data Catalog"
      ],
      "taxonomyPath": "public-data.catalog.catalog.public-data-catalog",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "catalog",
          "name": "Catalog"
        },
        "shelf": {
          "id": "catalog",
          "name": "Catalog"
        },
        "offering": {
          "id": "public-data-catalog",
          "name": "Public Data Catalog"
        },
        "pathIds": [
          "public-data",
          "catalog",
          "catalog",
          "public-data-catalog"
        ],
        "pathLabels": [
          "Public Data",
          "Catalog",
          "Catalog",
          "Public Data Catalog"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "public-data-department",
        "public-data",
        "catalog",
        "marketplace-listings",
        "real-estate",
        "ecommerce",
        "facebook-data",
        "jobs",
        "public-records",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
          },
          "category": {
            "type": "string",
            "enum": [
              "catalog",
              "workflow-bundles",
              "cached-results",
              "recurring-monitoring",
              "discovery-verification",
              "data-enrichment",
              "marketplace-listings",
              "real-estate-rentals",
              "ecommerce-products-reviews",
              "health-prices",
              "jobs-hiring",
              "facebook-data",
              "social-video-intelligence",
              "news",
              "public-records"
            ],
            "description": "Optional Public Data department/category to return."
          },
          "name": {
            "type": "string",
            "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
          },
          "includeSchemas": {
            "type": "boolean",
            "default": true,
            "description": "Include each endpoint's full input and output schemas."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 28,
            "description": "Maximum number of endpoints to return after filters."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "category",
          "name",
          "includeSchemas",
          "limit"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
          },
          {
            "name": "category",
            "type": "string",
            "required": false,
            "description": "Optional Public Data department/category to return.",
            "constraints": {
              "enum": [
                "catalog",
                "workflow-bundles",
                "cached-results",
                "recurring-monitoring",
                "discovery-verification",
                "data-enrichment",
                "marketplace-listings",
                "real-estate-rentals",
                "ecommerce-products-reviews",
                "health-prices",
                "jobs-hiring",
                "facebook-data",
                "social-video-intelligence",
                "news",
                "public-records"
              ]
            }
          },
          {
            "name": "name",
            "type": "string",
            "required": false,
            "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
          },
          {
            "name": "includeSchemas",
            "type": "boolean",
            "required": false,
            "description": "Include each endpoint's full input and output schemas.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum number of endpoints to return after filters.",
            "constraints": {
              "default": 28,
              "minimum": 1,
              "maximum": 50
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "category": "public-records",
          "includeSchemas": true,
          "limit": 10
        }
      },
      "exampleRequest": {
        "category": "public-records",
        "includeSchemas": true,
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "department",
          "categories",
          "endpoints"
        ],
        "properties": {
          "department": {
            "type": "object",
            "additionalProperties": true
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "endpoints": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "department": {
          "name": "AgentBodega Public Data Department",
          "department": "Public Data"
        },
        "categories": [
          {
            "category": "public-records",
            "count": 3
          }
        ],
        "endpoints": [
          {
            "name": "osha-violations-scraper",
            "category": "public-records",
            "price": {
              "mode": "dynamic"
            }
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "category": "public-records",
                "includeSchemas": true,
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "department": {
                  "name": "AgentBodega Public Data Department",
                  "department": "Public Data"
                },
                "categories": [
                  {
                    "category": "public-records",
                    "count": 3
                  }
                ],
                "endpoints": [
                  {
                    "name": "osha-violations-scraper",
                    "category": "public-records",
                    "price": {
                      "mode": "dynamic"
                    }
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/catalog",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
                      },
                      "category": {
                        "type": "string",
                        "enum": [
                          "catalog",
                          "workflow-bundles",
                          "cached-results",
                          "recurring-monitoring",
                          "discovery-verification",
                          "data-enrichment",
                          "marketplace-listings",
                          "real-estate-rentals",
                          "ecommerce-products-reviews",
                          "health-prices",
                          "jobs-hiring",
                          "facebook-data",
                          "social-video-intelligence",
                          "news",
                          "public-records"
                        ],
                        "description": "Optional Public Data department/category to return."
                      },
                      "name": {
                        "type": "string",
                        "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
                      },
                      "includeSchemas": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include each endpoint's full input and output schemas."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 50,
                        "default": 28,
                        "description": "Maximum number of endpoints to return after filters."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "department",
                      "categories",
                      "endpoints"
                    ],
                    "properties": {
                      "department": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "categories": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "endpoints": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "public-data-catalog",
            "url": "https://agentbodega.store/api/public-data/catalog",
            "method": "POST",
            "description": "Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.",
            "longDescription": "Purpose: Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nBest use: Use this when an agent needs return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, category, name, includeSchemas, limit.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against endpoint name, title, category, description, tags, and path.\n- category (optional, string): Optional Public Data department/category to return. Constraints: accepted values: \"catalog\", \"workflow-bundles\", \"cached-results\", \"recurring-monitoring\", \"discovery-verification\", \"data-enrichment\", \"marketplace-listings\", \"real-estate-rentals\", \"ecommerce-products-reviews\", \"health-prices\", \"jobs-hiring\", \"facebook-data\", \"social-video-intelligence\", \"news\", \"public-records\".\n- name (optional, string): Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads.\n- includeSchemas (optional, boolean): Include each endpoint's full input and output schemas. Constraints: default: true.\n- limit (optional, integer): Maximum number of endpoints to return after filters. Constraints: default: 28; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"category\": \"public-records\",\n  \"includeSchemas\": true,\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Public Data Catalog",
            "category": "public-data",
            "kind": "department-catalog",
            "tags": [
              "public-data-department",
              "public-data",
              "catalog",
              "marketplace-listings",
              "real-estate",
              "ecommerce",
              "facebook-data",
              "jobs",
              "public-records",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "category",
                "name",
                "includeSchemas",
                "limit"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
                },
                {
                  "name": "category",
                  "type": "string",
                  "required": false,
                  "description": "Optional Public Data department/category to return.",
                  "constraints": {
                    "enum": [
                      "catalog",
                      "workflow-bundles",
                      "cached-results",
                      "recurring-monitoring",
                      "discovery-verification",
                      "data-enrichment",
                      "marketplace-listings",
                      "real-estate-rentals",
                      "ecommerce-products-reviews",
                      "health-prices",
                      "jobs-hiring",
                      "facebook-data",
                      "social-video-intelligence",
                      "news",
                      "public-records"
                    ]
                  }
                },
                {
                  "name": "name",
                  "type": "string",
                  "required": false,
                  "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
                },
                {
                  "name": "includeSchemas",
                  "type": "boolean",
                  "required": false,
                  "description": "Include each endpoint's full input and output schemas.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum number of endpoints to return after filters.",
                  "constraints": {
                    "default": 28,
                    "minimum": 1,
                    "maximum": 50
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "category": "public-records",
                "includeSchemas": true,
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "query": {
                  "type": "string",
                  "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
                },
                "category": {
                  "type": "string",
                  "enum": [
                    "catalog",
                    "workflow-bundles",
                    "cached-results",
                    "recurring-monitoring",
                    "discovery-verification",
                    "data-enrichment",
                    "marketplace-listings",
                    "real-estate-rentals",
                    "ecommerce-products-reviews",
                    "health-prices",
                    "jobs-hiring",
                    "facebook-data",
                    "social-video-intelligence",
                    "news",
                    "public-records"
                  ],
                  "description": "Optional Public Data department/category to return."
                },
                "name": {
                  "type": "string",
                  "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
                },
                "includeSchemas": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include each endpoint's full input and output schemas."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 50,
                  "default": 28,
                  "description": "Maximum number of endpoints to return after filters."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "department",
                "categories",
                "endpoints"
              ],
              "properties": {
                "department": {
                  "type": "object",
                  "additionalProperties": true
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "endpoints": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/catalog",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/catalog",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "department-catalog",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "catalog",
          "aisle": "Catalog",
          "shelfId": "catalog",
          "shelf": "Catalog",
          "offeringId": "public-data-catalog",
          "offering": "Public Data Catalog",
          "pathIds": [
            "public-data",
            "catalog",
            "catalog",
            "public-data-catalog"
          ],
          "pathLabels": [
            "Public Data",
            "Catalog",
            "Catalog",
            "Public Data Catalog"
          ],
          "taxonomyPath": "public-data.catalog.catalog.public-data-catalog",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "catalog",
              "name": "Catalog"
            },
            "shelf": {
              "id": "catalog",
              "name": "Catalog"
            },
            "offering": {
              "id": "public-data-catalog",
              "name": "Public Data Catalog"
            },
            "pathIds": [
              "public-data",
              "catalog",
              "catalog",
              "public-data-catalog"
            ],
            "pathLabels": [
              "Public Data",
              "Catalog",
              "Catalog",
              "Public Data Catalog"
            ]
          }
        },
        "description": {
          "short": "Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.",
          "full": "Purpose: Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nBest use: Use this when an agent needs return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, category, name, includeSchemas, limit.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against endpoint name, title, category, description, tags, and path.\n- category (optional, string): Optional Public Data department/category to return. Constraints: accepted values: \"catalog\", \"workflow-bundles\", \"cached-results\", \"recurring-monitoring\", \"discovery-verification\", \"data-enrichment\", \"marketplace-listings\", \"real-estate-rentals\", \"ecommerce-products-reviews\", \"health-prices\", \"jobs-hiring\", \"facebook-data\", \"social-video-intelligence\", \"news\", \"public-records\".\n- name (optional, string): Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads.\n- includeSchemas (optional, boolean): Include each endpoint's full input and output schemas. Constraints: default: true.\n- limit (optional, integer): Maximum number of endpoints to return after filters. Constraints: default: 28; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"category\": \"public-records\",\n  \"includeSchemas\": true,\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
            },
            "category": {
              "type": "string",
              "enum": [
                "catalog",
                "workflow-bundles",
                "cached-results",
                "recurring-monitoring",
                "discovery-verification",
                "data-enrichment",
                "marketplace-listings",
                "real-estate-rentals",
                "ecommerce-products-reviews",
                "health-prices",
                "jobs-hiring",
                "facebook-data",
                "social-video-intelligence",
                "news",
                "public-records"
              ],
              "description": "Optional Public Data department/category to return."
            },
            "name": {
              "type": "string",
              "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
            },
            "includeSchemas": {
              "type": "boolean",
              "default": true,
              "description": "Include each endpoint's full input and output schemas."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 28,
              "description": "Maximum number of endpoints to return after filters."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
            },
            "category": {
              "type": "string",
              "enum": [
                "catalog",
                "workflow-bundles",
                "cached-results",
                "recurring-monitoring",
                "discovery-verification",
                "data-enrichment",
                "marketplace-listings",
                "real-estate-rentals",
                "ecommerce-products-reviews",
                "health-prices",
                "jobs-hiring",
                "facebook-data",
                "social-video-intelligence",
                "news",
                "public-records"
              ],
              "description": "Optional Public Data department/category to return."
            },
            "name": {
              "type": "string",
              "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
            },
            "includeSchemas": {
              "type": "boolean",
              "default": true,
              "description": "Include each endpoint's full input and output schemas."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 28,
              "description": "Maximum number of endpoints to return after filters."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "category",
            "name",
            "includeSchemas",
            "limit"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
            },
            {
              "name": "category",
              "type": "string",
              "required": false,
              "description": "Optional Public Data department/category to return.",
              "constraints": {
                "enum": [
                  "catalog",
                  "workflow-bundles",
                  "cached-results",
                  "recurring-monitoring",
                  "discovery-verification",
                  "data-enrichment",
                  "marketplace-listings",
                  "real-estate-rentals",
                  "ecommerce-products-reviews",
                  "health-prices",
                  "jobs-hiring",
                  "facebook-data",
                  "social-video-intelligence",
                  "news",
                  "public-records"
                ]
              }
            },
            {
              "name": "name",
              "type": "string",
              "required": false,
              "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
            },
            {
              "name": "includeSchemas",
              "type": "boolean",
              "required": false,
              "description": "Include each endpoint's full input and output schemas.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum number of endpoints to return after filters.",
              "constraints": {
                "default": 28,
                "minimum": 1,
                "maximum": 50
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "category": "public-records",
            "includeSchemas": true,
            "limit": 10
          }
        },
        "exampleRequest": {
          "category": "public-records",
          "includeSchemas": true,
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "department",
            "categories",
            "endpoints"
          ],
          "properties": {
            "department": {
              "type": "object",
              "additionalProperties": true
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "endpoints": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "department",
            "categories",
            "endpoints"
          ],
          "properties": {
            "department": {
              "type": "object",
              "additionalProperties": true
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "endpoints": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "department": {
            "name": "AgentBodega Public Data Department",
            "department": "Public Data"
          },
          "categories": [
            {
              "category": "public-records",
              "count": 3
            }
          ],
          "endpoints": [
            {
              "name": "osha-violations-scraper",
              "category": "public-records",
              "price": {
                "mode": "dynamic"
              }
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/social-media/catalog",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Social Media Department Catalog",
      "description": "Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.",
      "longDescription": "Purpose: Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nBest use: Use this when an agent needs return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: platform, query, includeSchemas, includeExternalPattern, includeCoverageMap, limit.\n\nAccepted fields:\n- platform (optional, string): Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department. Constraints: accepted values: \"all\", \"x\", \"twitter\", \"tiktok\", \"instagram\", \"facebook\", \"reddit\", \"youtube\", \"linkedin\", \"threads\", \"bluesky\", \"pinterest\", \"twitch\", \"snapchat\", \"github\", \"spotify\", \"soundcloud\", \"rumble\", \"truthsocial\", \"web\", \"amazon\", \"inference\", \"ads\", \"link-in-bio\", \"ugc\"; default: \"all\".\n- query (optional, string): Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases.\n- includeSchemas (optional, boolean): Include full schemas for configured AgentBodega social data endpoints. Constraints: default: true.\n- includeExternalPattern (optional, boolean): Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources. Constraints: default: true.\n- includeCoverageMap (optional, boolean): Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources. Constraints: default: true.\n- limit (optional, integer): Maximum configured endpoints and pattern rows to return. Constraints: default: 20; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"platform\": \"all\",\n  \"includeExternalPattern\": true,\n  \"includeCoverageMap\": true,\n  \"includeSchemas\": true,\n  \"limit\": 50\n}\n```",
      "category": "social-media",
      "kind": "department-catalog",
      "departmentId": "social-media",
      "department": "Social Media",
      "aisleId": "catalog",
      "aisle": "Catalog",
      "offeringId": "social-media-catalog",
      "offering": "Social Media Department Catalog",
      "pathIds": [
        "social-media",
        "catalog",
        "social-media-catalog"
      ],
      "pathLabels": [
        "Social Media",
        "Catalog",
        "Social Media Department Catalog"
      ],
      "taxonomyPath": "social-media.catalog.social-media-catalog",
      "layout": {
        "department": {
          "id": "social-media",
          "name": "Social Media"
        },
        "aisle": {
          "id": "catalog",
          "name": "Catalog"
        },
        "offering": {
          "id": "social-media-catalog",
          "name": "Social Media Department Catalog"
        },
        "pathIds": [
          "social-media",
          "catalog",
          "social-media-catalog"
        ],
        "pathLabels": [
          "Social Media",
          "Catalog",
          "Social Media Department Catalog"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "social-media",
        "x",
        "twitter",
        "tiktok",
        "facebook",
        "instagram",
        "reddit",
        "youtube",
        "linkedin",
        "threads",
        "bluesky",
        "pinterest",
        "twitch",
        "spotify",
        "ads",
        "ugc",
        "public-data",
        "creator-research",
        "social-listening"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string",
            "enum": [
              "all",
              "x",
              "twitter",
              "tiktok",
              "instagram",
              "facebook",
              "reddit",
              "youtube",
              "linkedin",
              "threads",
              "bluesky",
              "pinterest",
              "twitch",
              "snapchat",
              "github",
              "spotify",
              "soundcloud",
              "rumble",
              "truthsocial",
              "web",
              "amazon",
              "inference",
              "ads",
              "link-in-bio",
              "ugc"
            ],
            "default": "all",
            "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department."
          },
          "query": {
            "type": "string",
            "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
          },
          "includeSchemas": {
            "type": "boolean",
            "default": true,
            "description": "Include full schemas for configured AgentBodega social data endpoints."
          },
          "includeExternalPattern": {
            "type": "boolean",
            "default": true,
            "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources."
          },
          "includeCoverageMap": {
            "type": "boolean",
            "default": true,
            "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Maximum configured endpoints and pattern rows to return."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "platform",
          "query",
          "includeSchemas",
          "includeExternalPattern",
          "includeCoverageMap",
          "limit"
        ],
        "fields": [
          {
            "name": "platform",
            "type": "string",
            "required": false,
            "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department.",
            "constraints": {
              "enum": [
                "all",
                "x",
                "twitter",
                "tiktok",
                "instagram",
                "facebook",
                "reddit",
                "youtube",
                "linkedin",
                "threads",
                "bluesky",
                "pinterest",
                "twitch",
                "snapchat",
                "github",
                "spotify",
                "soundcloud",
                "rumble",
                "truthsocial",
                "web",
                "amazon",
                "inference",
                "ads",
                "link-in-bio",
                "ugc"
              ],
              "default": "all"
            }
          },
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
          },
          {
            "name": "includeSchemas",
            "type": "boolean",
            "required": false,
            "description": "Include full schemas for configured AgentBodega social data endpoints.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeExternalPattern",
            "type": "boolean",
            "required": false,
            "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeCoverageMap",
            "type": "boolean",
            "required": false,
            "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum configured endpoints and pattern rows to return.",
            "constraints": {
              "default": 20,
              "minimum": 1,
              "maximum": 50
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "platform": "all",
          "includeExternalPattern": true,
          "includeCoverageMap": true,
          "includeSchemas": true,
          "limit": 50
        }
      },
      "exampleRequest": {
        "platform": "all",
        "includeExternalPattern": true,
        "includeCoverageMap": true,
        "includeSchemas": true,
        "limit": 50
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "department",
          "endpoints",
          "xTwitterReadOnlyPattern",
          "socialCoveragePattern"
        ],
        "properties": {
          "department": {
            "type": "object",
            "additionalProperties": true
          },
          "endpoints": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "xTwitterReadOnlyPattern": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "socialCoveragePattern": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "nextSteps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "department": {
          "name": "AgentBodega Social Media Department",
          "department": "Social Media"
        },
        "endpoints": [
          {
            "name": "facebook-page-posts-scraper",
            "platform": "facebook",
            "configured": true
          }
        ],
        "xTwitterReadOnlyPattern": [
          {
            "id": "x-tweet-search",
            "status": "available",
            "priceUsd": "0.06",
            "configured": true
          }
        ],
        "socialCoveragePattern": [
          {
            "id": "tiktok-social-video",
            "status": "staged",
            "configured": false,
            "plannedProducts": [
              "profiles",
              "videos",
              "comments",
              "search"
            ]
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "platform": "all",
                "includeExternalPattern": true,
                "includeCoverageMap": true,
                "includeSchemas": true,
                "limit": 50
              }
            },
            "output": {
              "type": "json",
              "example": {
                "department": {
                  "name": "AgentBodega Social Media Department",
                  "department": "Social Media"
                },
                "endpoints": [
                  {
                    "name": "facebook-page-posts-scraper",
                    "platform": "facebook",
                    "configured": true
                  }
                ],
                "xTwitterReadOnlyPattern": [
                  {
                    "id": "x-tweet-search",
                    "status": "available",
                    "priceUsd": "0.06",
                    "configured": true
                  }
                ],
                "socialCoveragePattern": [
                  {
                    "id": "tiktok-social-video",
                    "status": "staged",
                    "configured": false,
                    "plannedProducts": [
                      "profiles",
                      "videos",
                      "comments",
                      "search"
                    ]
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/social-media/catalog",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "platform": {
                        "type": "string",
                        "enum": [
                          "all",
                          "x",
                          "twitter",
                          "tiktok",
                          "instagram",
                          "facebook",
                          "reddit",
                          "youtube",
                          "linkedin",
                          "threads",
                          "bluesky",
                          "pinterest",
                          "twitch",
                          "snapchat",
                          "github",
                          "spotify",
                          "soundcloud",
                          "rumble",
                          "truthsocial",
                          "web",
                          "amazon",
                          "inference",
                          "ads",
                          "link-in-bio",
                          "ugc"
                        ],
                        "default": "all",
                        "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department."
                      },
                      "query": {
                        "type": "string",
                        "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
                      },
                      "includeSchemas": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include full schemas for configured AgentBodega social data endpoints."
                      },
                      "includeExternalPattern": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources."
                      },
                      "includeCoverageMap": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 50,
                        "default": 20,
                        "description": "Maximum configured endpoints and pattern rows to return."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "department",
                      "endpoints",
                      "xTwitterReadOnlyPattern",
                      "socialCoveragePattern"
                    ],
                    "properties": {
                      "department": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "endpoints": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "xTwitterReadOnlyPattern": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "socialCoveragePattern": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "categories": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "nextSteps": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "social-media-catalog",
            "url": "https://agentbodega.store/api/social-media/catalog",
            "method": "POST",
            "description": "Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.",
            "longDescription": "Purpose: Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nBest use: Use this when an agent needs return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: platform, query, includeSchemas, includeExternalPattern, includeCoverageMap, limit.\n\nAccepted fields:\n- platform (optional, string): Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department. Constraints: accepted values: \"all\", \"x\", \"twitter\", \"tiktok\", \"instagram\", \"facebook\", \"reddit\", \"youtube\", \"linkedin\", \"threads\", \"bluesky\", \"pinterest\", \"twitch\", \"snapchat\", \"github\", \"spotify\", \"soundcloud\", \"rumble\", \"truthsocial\", \"web\", \"amazon\", \"inference\", \"ads\", \"link-in-bio\", \"ugc\"; default: \"all\".\n- query (optional, string): Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases.\n- includeSchemas (optional, boolean): Include full schemas for configured AgentBodega social data endpoints. Constraints: default: true.\n- includeExternalPattern (optional, boolean): Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources. Constraints: default: true.\n- includeCoverageMap (optional, boolean): Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources. Constraints: default: true.\n- limit (optional, integer): Maximum configured endpoints and pattern rows to return. Constraints: default: 20; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"platform\": \"all\",\n  \"includeExternalPattern\": true,\n  \"includeCoverageMap\": true,\n  \"includeSchemas\": true,\n  \"limit\": 50\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Social Media Department Catalog",
            "category": "social-media",
            "kind": "department-catalog",
            "tags": [
              "social-media",
              "x",
              "twitter",
              "tiktok",
              "facebook",
              "instagram",
              "reddit",
              "youtube",
              "linkedin",
              "threads",
              "bluesky",
              "pinterest",
              "twitch",
              "spotify",
              "ads",
              "ugc",
              "public-data",
              "creator-research",
              "social-listening"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "platform",
                "query",
                "includeSchemas",
                "includeExternalPattern",
                "includeCoverageMap",
                "limit"
              ],
              "fields": [
                {
                  "name": "platform",
                  "type": "string",
                  "required": false,
                  "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department.",
                  "constraints": {
                    "enum": [
                      "all",
                      "x",
                      "twitter",
                      "tiktok",
                      "instagram",
                      "facebook",
                      "reddit",
                      "youtube",
                      "linkedin",
                      "threads",
                      "bluesky",
                      "pinterest",
                      "twitch",
                      "snapchat",
                      "github",
                      "spotify",
                      "soundcloud",
                      "rumble",
                      "truthsocial",
                      "web",
                      "amazon",
                      "inference",
                      "ads",
                      "link-in-bio",
                      "ugc"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
                },
                {
                  "name": "includeSchemas",
                  "type": "boolean",
                  "required": false,
                  "description": "Include full schemas for configured AgentBodega social data endpoints.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeExternalPattern",
                  "type": "boolean",
                  "required": false,
                  "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeCoverageMap",
                  "type": "boolean",
                  "required": false,
                  "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum configured endpoints and pattern rows to return.",
                  "constraints": {
                    "default": 20,
                    "minimum": 1,
                    "maximum": 50
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "platform": "all",
                "includeExternalPattern": true,
                "includeCoverageMap": true,
                "includeSchemas": true,
                "limit": 50
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "platform": {
                  "type": "string",
                  "enum": [
                    "all",
                    "x",
                    "twitter",
                    "tiktok",
                    "instagram",
                    "facebook",
                    "reddit",
                    "youtube",
                    "linkedin",
                    "threads",
                    "bluesky",
                    "pinterest",
                    "twitch",
                    "snapchat",
                    "github",
                    "spotify",
                    "soundcloud",
                    "rumble",
                    "truthsocial",
                    "web",
                    "amazon",
                    "inference",
                    "ads",
                    "link-in-bio",
                    "ugc"
                  ],
                  "default": "all",
                  "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department."
                },
                "query": {
                  "type": "string",
                  "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
                },
                "includeSchemas": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include full schemas for configured AgentBodega social data endpoints."
                },
                "includeExternalPattern": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources."
                },
                "includeCoverageMap": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 50,
                  "default": 20,
                  "description": "Maximum configured endpoints and pattern rows to return."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "department",
                "endpoints",
                "xTwitterReadOnlyPattern",
                "socialCoveragePattern"
              ],
              "properties": {
                "department": {
                  "type": "object",
                  "additionalProperties": true
                },
                "endpoints": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "xTwitterReadOnlyPattern": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "socialCoveragePattern": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "nextSteps": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/social-media/catalog",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/social-media/catalog",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "social-media",
        "kind": "department-catalog",
        "taxonomy": {
          "departmentId": "social-media",
          "department": "Social Media",
          "aisleId": "catalog",
          "aisle": "Catalog",
          "offeringId": "social-media-catalog",
          "offering": "Social Media Department Catalog",
          "pathIds": [
            "social-media",
            "catalog",
            "social-media-catalog"
          ],
          "pathLabels": [
            "Social Media",
            "Catalog",
            "Social Media Department Catalog"
          ],
          "taxonomyPath": "social-media.catalog.social-media-catalog",
          "layout": {
            "department": {
              "id": "social-media",
              "name": "Social Media"
            },
            "aisle": {
              "id": "catalog",
              "name": "Catalog"
            },
            "offering": {
              "id": "social-media-catalog",
              "name": "Social Media Department Catalog"
            },
            "pathIds": [
              "social-media",
              "catalog",
              "social-media-catalog"
            ],
            "pathLabels": [
              "Social Media",
              "Catalog",
              "Social Media Department Catalog"
            ]
          }
        },
        "description": {
          "short": "Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.",
          "full": "Purpose: Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nBest use: Use this when an agent needs return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: platform, query, includeSchemas, includeExternalPattern, includeCoverageMap, limit.\n\nAccepted fields:\n- platform (optional, string): Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department. Constraints: accepted values: \"all\", \"x\", \"twitter\", \"tiktok\", \"instagram\", \"facebook\", \"reddit\", \"youtube\", \"linkedin\", \"threads\", \"bluesky\", \"pinterest\", \"twitch\", \"snapchat\", \"github\", \"spotify\", \"soundcloud\", \"rumble\", \"truthsocial\", \"web\", \"amazon\", \"inference\", \"ads\", \"link-in-bio\", \"ugc\"; default: \"all\".\n- query (optional, string): Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases.\n- includeSchemas (optional, boolean): Include full schemas for configured AgentBodega social data endpoints. Constraints: default: true.\n- includeExternalPattern (optional, boolean): Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources. Constraints: default: true.\n- includeCoverageMap (optional, boolean): Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources. Constraints: default: true.\n- limit (optional, integer): Maximum configured endpoints and pattern rows to return. Constraints: default: 20; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"platform\": \"all\",\n  \"includeExternalPattern\": true,\n  \"includeCoverageMap\": true,\n  \"includeSchemas\": true,\n  \"limit\": 50\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "platform": {
              "type": "string",
              "enum": [
                "all",
                "x",
                "twitter",
                "tiktok",
                "instagram",
                "facebook",
                "reddit",
                "youtube",
                "linkedin",
                "threads",
                "bluesky",
                "pinterest",
                "twitch",
                "snapchat",
                "github",
                "spotify",
                "soundcloud",
                "rumble",
                "truthsocial",
                "web",
                "amazon",
                "inference",
                "ads",
                "link-in-bio",
                "ugc"
              ],
              "default": "all",
              "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department."
            },
            "query": {
              "type": "string",
              "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
            },
            "includeSchemas": {
              "type": "boolean",
              "default": true,
              "description": "Include full schemas for configured AgentBodega social data endpoints."
            },
            "includeExternalPattern": {
              "type": "boolean",
              "default": true,
              "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources."
            },
            "includeCoverageMap": {
              "type": "boolean",
              "default": true,
              "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20,
              "description": "Maximum configured endpoints and pattern rows to return."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "platform": {
              "type": "string",
              "enum": [
                "all",
                "x",
                "twitter",
                "tiktok",
                "instagram",
                "facebook",
                "reddit",
                "youtube",
                "linkedin",
                "threads",
                "bluesky",
                "pinterest",
                "twitch",
                "snapchat",
                "github",
                "spotify",
                "soundcloud",
                "rumble",
                "truthsocial",
                "web",
                "amazon",
                "inference",
                "ads",
                "link-in-bio",
                "ugc"
              ],
              "default": "all",
              "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department."
            },
            "query": {
              "type": "string",
              "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
            },
            "includeSchemas": {
              "type": "boolean",
              "default": true,
              "description": "Include full schemas for configured AgentBodega social data endpoints."
            },
            "includeExternalPattern": {
              "type": "boolean",
              "default": true,
              "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources."
            },
            "includeCoverageMap": {
              "type": "boolean",
              "default": true,
              "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20,
              "description": "Maximum configured endpoints and pattern rows to return."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "platform",
            "query",
            "includeSchemas",
            "includeExternalPattern",
            "includeCoverageMap",
            "limit"
          ],
          "fields": [
            {
              "name": "platform",
              "type": "string",
              "required": false,
              "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department.",
              "constraints": {
                "enum": [
                  "all",
                  "x",
                  "twitter",
                  "tiktok",
                  "instagram",
                  "facebook",
                  "reddit",
                  "youtube",
                  "linkedin",
                  "threads",
                  "bluesky",
                  "pinterest",
                  "twitch",
                  "snapchat",
                  "github",
                  "spotify",
                  "soundcloud",
                  "rumble",
                  "truthsocial",
                  "web",
                  "amazon",
                  "inference",
                  "ads",
                  "link-in-bio",
                  "ugc"
                ],
                "default": "all"
              }
            },
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
            },
            {
              "name": "includeSchemas",
              "type": "boolean",
              "required": false,
              "description": "Include full schemas for configured AgentBodega social data endpoints.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeExternalPattern",
              "type": "boolean",
              "required": false,
              "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeCoverageMap",
              "type": "boolean",
              "required": false,
              "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum configured endpoints and pattern rows to return.",
              "constraints": {
                "default": 20,
                "minimum": 1,
                "maximum": 50
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "platform": "all",
            "includeExternalPattern": true,
            "includeCoverageMap": true,
            "includeSchemas": true,
            "limit": 50
          }
        },
        "exampleRequest": {
          "platform": "all",
          "includeExternalPattern": true,
          "includeCoverageMap": true,
          "includeSchemas": true,
          "limit": 50
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "department",
            "endpoints",
            "xTwitterReadOnlyPattern",
            "socialCoveragePattern"
          ],
          "properties": {
            "department": {
              "type": "object",
              "additionalProperties": true
            },
            "endpoints": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "xTwitterReadOnlyPattern": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "socialCoveragePattern": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "nextSteps": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "department",
            "endpoints",
            "xTwitterReadOnlyPattern",
            "socialCoveragePattern"
          ],
          "properties": {
            "department": {
              "type": "object",
              "additionalProperties": true
            },
            "endpoints": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "xTwitterReadOnlyPattern": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "socialCoveragePattern": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "nextSteps": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "department": {
            "name": "AgentBodega Social Media Department",
            "department": "Social Media"
          },
          "endpoints": [
            {
              "name": "facebook-page-posts-scraper",
              "platform": "facebook",
              "configured": true
            }
          ],
          "xTwitterReadOnlyPattern": [
            {
              "id": "x-tweet-search",
              "status": "available",
              "priceUsd": "0.06",
              "configured": true
            }
          ],
          "socialCoveragePattern": [
            {
              "id": "tiktok-social-video",
              "status": "staged",
              "configured": false,
              "plannedProducts": [
                "profiles",
                "videos",
                "comments",
                "search"
              ]
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/web/search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Web Search",
      "description": "Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.",
      "longDescription": "Purpose: Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nBest use: Use this when an agent needs search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, site, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Natural-language search query or keyword query to run against public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum normalized results to return. Constraints: default: 5; min: 1; max: 10.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit result snippets and return titles, URLs, domains, and rank only. Constraints: default: true.\n- timeoutMs (optional, integer): Search timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"agent payment APIs\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```",
      "category": "search-web",
      "kind": "web-search-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "search",
      "aisle": "Search",
      "shelfId": "web-results",
      "shelf": "Web Results",
      "offeringId": "web-search",
      "offering": "Web Search",
      "pathIds": [
        "search-web",
        "search",
        "web-results",
        "web-search"
      ],
      "pathLabels": [
        "Search & Web",
        "Search",
        "Web Results",
        "Web Search"
      ],
      "taxonomyPath": "search-web.search.web-results.web-search",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "search",
          "name": "Search"
        },
        "shelf": {
          "id": "web-results",
          "name": "Web Results"
        },
        "offering": {
          "id": "web-search",
          "name": "Web Search"
        },
        "pathIds": [
          "search-web",
          "search",
          "web-results",
          "web-search"
        ],
        "pathLabels": [
          "Search & Web",
          "Search",
          "Web Results",
          "Web Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "search",
        "source-discovery",
        "citations",
        "research",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 240,
            "description": "Natural-language search query or keyword query to run against public web results."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "default": 5,
            "description": "Maximum normalized results to return."
          },
          "site": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
          },
          "freshness": {
            "type": "string",
            "enum": [
              "any",
              "day",
              "week",
              "month",
              "year"
            ],
            "default": "any",
            "description": "Optional freshness preference. Use any when recency is not required."
          },
          "includeSnippets": {
            "type": "boolean",
            "default": true,
            "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 6000,
            "description": "Search timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "query"
        ],
        "optional": [
          "limit",
          "site",
          "freshness",
          "includeSnippets",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": true,
            "description": "Natural-language search query or keyword query to run against public web results.",
            "constraints": {
              "minLength": 2,
              "maxLength": 240
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum normalized results to return.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 10
            }
          },
          {
            "name": "site",
            "type": "string",
            "required": false,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "freshness",
            "type": "string",
            "required": false,
            "description": "Optional freshness preference. Use any when recency is not required.",
            "constraints": {
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any"
            }
          },
          {
            "name": "includeSnippets",
            "type": "boolean",
            "required": false,
            "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Search timeout in milliseconds.",
            "constraints": {
              "default": 6000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "agent payment APIs",
          "limit": 5,
          "freshness": "any",
          "includeSnippets": true
        }
      },
      "exampleRequest": {
        "query": "agent payment APIs",
        "limit": 5,
        "freshness": "any",
        "includeSnippets": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "search",
          "results",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "search": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "web-search",
          "name": "Web Search",
          "department": "Search & Web"
        },
        "requested": {
          "query": "agent payment APIs",
          "site": null,
          "freshness": "any",
          "limit": 5,
          "includeSnippets": true
        },
        "source": {
          "routing": "managed-web-search",
          "upstreamDetailsDisclosed": false
        },
        "search": {
          "query": "agent payment APIs",
          "resultCount": 2,
          "checkedAt": "2026-07-07T00:00:00.000Z",
          "durationMs": 420
        },
        "results": [
          {
            "rank": 1,
            "title": "Agent Payment API Guide",
            "url": "https://example.com/agent-payments",
            "domain": "example.com",
            "snippet": "A guide to payment-enabled API calls for agents."
          },
          {
            "rank": 2,
            "title": "x402 API Examples",
            "url": "https://example.org/x402-examples",
            "domain": "example.org",
            "snippet": "Examples of HTTP 402 payment flows."
          }
        ],
        "limits": {
          "maxResults": 10,
          "timeoutMs": 6000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "agent payment APIs",
                "limit": 5,
                "freshness": "any",
                "includeSnippets": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "web-search",
                  "name": "Web Search",
                  "department": "Search & Web"
                },
                "requested": {
                  "query": "agent payment APIs",
                  "site": null,
                  "freshness": "any",
                  "limit": 5,
                  "includeSnippets": true
                },
                "source": {
                  "routing": "managed-web-search",
                  "upstreamDetailsDisclosed": false
                },
                "search": {
                  "query": "agent payment APIs",
                  "resultCount": 2,
                  "checkedAt": "2026-07-07T00:00:00.000Z",
                  "durationMs": 420
                },
                "results": [
                  {
                    "rank": 1,
                    "title": "Agent Payment API Guide",
                    "url": "https://example.com/agent-payments",
                    "domain": "example.com",
                    "snippet": "A guide to payment-enabled API calls for agents."
                  },
                  {
                    "rank": 2,
                    "title": "x402 API Examples",
                    "url": "https://example.org/x402-examples",
                    "domain": "example.org",
                    "snippet": "Examples of HTTP 402 payment flows."
                  }
                ],
                "limits": {
                  "maxResults": 10,
                  "timeoutMs": 6000
                }
              }
            }
          },
          "routeTemplate": "/api/web/search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "query"
                    ],
                    "properties": {
                      "query": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 240,
                        "description": "Natural-language search query or keyword query to run against public web results."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 10,
                        "default": 5,
                        "description": "Maximum normalized results to return."
                      },
                      "site": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                      },
                      "freshness": {
                        "type": "string",
                        "enum": [
                          "any",
                          "day",
                          "week",
                          "month",
                          "year"
                        ],
                        "default": "any",
                        "description": "Optional freshness preference. Use any when recency is not required."
                      },
                      "includeSnippets": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 6000,
                        "description": "Search timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "search",
                      "results",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "search": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "web-search",
            "url": "https://agentbodega.store/api/web/search",
            "method": "POST",
            "description": "Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.",
            "longDescription": "Purpose: Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nBest use: Use this when an agent needs search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, site, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Natural-language search query or keyword query to run against public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum normalized results to return. Constraints: default: 5; min: 1; max: 10.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit result snippets and return titles, URLs, domains, and rank only. Constraints: default: true.\n- timeoutMs (optional, integer): Search timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"agent payment APIs\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Web Search",
            "category": "search-web",
            "kind": "web-search-tool",
            "tags": [
              "search-web",
              "web",
              "search",
              "source-discovery",
              "citations",
              "research",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "query"
              ],
              "optional": [
                "limit",
                "site",
                "freshness",
                "includeSnippets",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": true,
                  "description": "Natural-language search query or keyword query to run against public web results.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 240
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum normalized results to return.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 10
                  }
                },
                {
                  "name": "site",
                  "type": "string",
                  "required": false,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "freshness",
                  "type": "string",
                  "required": false,
                  "description": "Optional freshness preference. Use any when recency is not required.",
                  "constraints": {
                    "enum": [
                      "any",
                      "day",
                      "week",
                      "month",
                      "year"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "includeSnippets",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Search timeout in milliseconds.",
                  "constraints": {
                    "default": 6000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "agent payment APIs",
                "limit": 5,
                "freshness": "any",
                "includeSnippets": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "query"
              ],
              "properties": {
                "query": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 240,
                  "description": "Natural-language search query or keyword query to run against public web results."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 10,
                  "default": 5,
                  "description": "Maximum normalized results to return."
                },
                "site": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                },
                "freshness": {
                  "type": "string",
                  "enum": [
                    "any",
                    "day",
                    "week",
                    "month",
                    "year"
                  ],
                  "default": "any",
                  "description": "Optional freshness preference. Use any when recency is not required."
                },
                "includeSnippets": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 6000,
                  "description": "Search timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "search",
                "results",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "search": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/web/search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/web/search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "web-search-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "search",
          "aisle": "Search",
          "shelfId": "web-results",
          "shelf": "Web Results",
          "offeringId": "web-search",
          "offering": "Web Search",
          "pathIds": [
            "search-web",
            "search",
            "web-results",
            "web-search"
          ],
          "pathLabels": [
            "Search & Web",
            "Search",
            "Web Results",
            "Web Search"
          ],
          "taxonomyPath": "search-web.search.web-results.web-search",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "search",
              "name": "Search"
            },
            "shelf": {
              "id": "web-results",
              "name": "Web Results"
            },
            "offering": {
              "id": "web-search",
              "name": "Web Search"
            },
            "pathIds": [
              "search-web",
              "search",
              "web-results",
              "web-search"
            ],
            "pathLabels": [
              "Search & Web",
              "Search",
              "Web Results",
              "Web Search"
            ]
          }
        },
        "description": {
          "short": "Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.",
          "full": "Purpose: Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nBest use: Use this when an agent needs search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, site, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Natural-language search query or keyword query to run against public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum normalized results to return. Constraints: default: 5; min: 1; max: 10.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit result snippets and return titles, URLs, domains, and rank only. Constraints: default: true.\n- timeoutMs (optional, integer): Search timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"agent payment APIs\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Natural-language search query or keyword query to run against public web results."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum normalized results to return."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "includeSnippets": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Natural-language search query or keyword query to run against public web results."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum normalized results to return."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "includeSnippets": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "query"
          ],
          "optional": [
            "limit",
            "site",
            "freshness",
            "includeSnippets",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": true,
              "description": "Natural-language search query or keyword query to run against public web results.",
              "constraints": {
                "minLength": 2,
                "maxLength": 240
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum normalized results to return.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 10
              }
            },
            {
              "name": "site",
              "type": "string",
              "required": false,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "freshness",
              "type": "string",
              "required": false,
              "description": "Optional freshness preference. Use any when recency is not required.",
              "constraints": {
                "enum": [
                  "any",
                  "day",
                  "week",
                  "month",
                  "year"
                ],
                "default": "any"
              }
            },
            {
              "name": "includeSnippets",
              "type": "boolean",
              "required": false,
              "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Search timeout in milliseconds.",
              "constraints": {
                "default": 6000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "agent payment APIs",
            "limit": 5,
            "freshness": "any",
            "includeSnippets": true
          }
        },
        "exampleRequest": {
          "query": "agent payment APIs",
          "limit": 5,
          "freshness": "any",
          "includeSnippets": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "search",
            "results",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "search",
            "results",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "web-search",
            "name": "Web Search",
            "department": "Search & Web"
          },
          "requested": {
            "query": "agent payment APIs",
            "site": null,
            "freshness": "any",
            "limit": 5,
            "includeSnippets": true
          },
          "source": {
            "routing": "managed-web-search",
            "upstreamDetailsDisclosed": false
          },
          "search": {
            "query": "agent payment APIs",
            "resultCount": 2,
            "checkedAt": "2026-07-07T00:00:00.000Z",
            "durationMs": 420
          },
          "results": [
            {
              "rank": 1,
              "title": "Agent Payment API Guide",
              "url": "https://example.com/agent-payments",
              "domain": "example.com",
              "snippet": "A guide to payment-enabled API calls for agents."
            },
            {
              "rank": 2,
              "title": "x402 API Examples",
              "url": "https://example.org/x402-examples",
              "domain": "example.org",
              "snippet": "Examples of HTTP 402 payment flows."
            }
          ],
          "limits": {
            "maxResults": 10,
            "timeoutMs": 6000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/web/similar",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Similar Page Finder",
      "description": "Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.",
      "longDescription": "Purpose: Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nBest use: Use this when an agent needs find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: url, intent, site, excludeDomains, limit, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages. Constraints: min length: 2; max length: 240.\n- url (optional, string): Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page. Constraints: format: uri.\n- intent (optional, string): Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references. Constraints: accepted values: \"related\", \"alternatives\", \"competitors\", \"sources\"; default: \"related\".\n- site (optional, string): Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- excludeDomains (optional, array): Optional domains to omit from returned matches. The seed URL domain is omitted automatically. Constraints: max items: 10.\n- limit (optional, integer): Maximum similar pages to return. Constraints: default: 5; min: 1; max: 10.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons. Constraints: default: true.\n- timeoutMs (optional, integer): Search and optional seed-page fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"x402 paid API marketplace\",\n  \"intent\": \"alternatives\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```",
      "category": "search-web",
      "kind": "web-similar-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "similar",
      "aisle": "Similar Pages",
      "shelfId": "related-pages",
      "shelf": "Related Pages",
      "offeringId": "web-similar",
      "offering": "Similar Page Finder",
      "pathIds": [
        "search-web",
        "similar",
        "related-pages",
        "web-similar"
      ],
      "pathLabels": [
        "Search & Web",
        "Similar Pages",
        "Related Pages",
        "Similar Page Finder"
      ],
      "taxonomyPath": "search-web.similar.related-pages.web-similar",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "similar",
          "name": "Similar Pages"
        },
        "shelf": {
          "id": "related-pages",
          "name": "Related Pages"
        },
        "offering": {
          "id": "web-similar",
          "name": "Similar Page Finder"
        },
        "pathIds": [
          "search-web",
          "similar",
          "related-pages",
          "web-similar"
        ],
        "pathLabels": [
          "Search & Web",
          "Similar Pages",
          "Related Pages",
          "Similar Page Finder"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "similar",
        "related-pages",
        "alternatives",
        "competitor-research",
        "source-discovery",
        "research",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 240,
            "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page."
          },
          "intent": {
            "type": "string",
            "enum": [
              "related",
              "alternatives",
              "competitors",
              "sources"
            ],
            "default": "related",
            "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references."
          },
          "site": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname."
          },
          "excludeDomains": {
            "type": "array",
            "maxItems": 10,
            "items": {
              "type": "string",
              "maxLength": 120,
              "description": "Exclude Domains item value for Similar Page Finder. Constraints: max length: 120."
            },
            "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "default": 5,
            "description": "Maximum similar pages to return."
          },
          "freshness": {
            "type": "string",
            "enum": [
              "any",
              "day",
              "week",
              "month",
              "year"
            ],
            "default": "any",
            "description": "Optional freshness preference. Use any when recency is not required."
          },
          "includeSnippets": {
            "type": "boolean",
            "default": true,
            "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 6000,
            "description": "Search and optional seed-page fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "query"
        ],
        "optional": [
          "url",
          "intent",
          "site",
          "excludeDomains",
          "limit",
          "freshness",
          "includeSnippets",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": true,
            "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages.",
            "constraints": {
              "minLength": 2,
              "maxLength": 240
            }
          },
          {
            "name": "url",
            "type": "string",
            "required": false,
            "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "intent",
            "type": "string",
            "required": false,
            "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references.",
            "constraints": {
              "enum": [
                "related",
                "alternatives",
                "competitors",
                "sources"
              ],
              "default": "related"
            }
          },
          {
            "name": "site",
            "type": "string",
            "required": false,
            "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "excludeDomains",
            "type": "array",
            "required": false,
            "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically.",
            "constraints": {
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum similar pages to return.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 10
            }
          },
          {
            "name": "freshness",
            "type": "string",
            "required": false,
            "description": "Optional freshness preference. Use any when recency is not required.",
            "constraints": {
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any"
            }
          },
          {
            "name": "includeSnippets",
            "type": "boolean",
            "required": false,
            "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Search and optional seed-page fetch timeout in milliseconds.",
            "constraints": {
              "default": 6000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "x402 paid API marketplace",
          "intent": "alternatives",
          "limit": 5,
          "freshness": "any",
          "includeSnippets": true
        }
      },
      "exampleRequest": {
        "query": "x402 paid API marketplace",
        "intent": "alternatives",
        "limit": 5,
        "freshness": "any",
        "includeSnippets": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "seed",
          "similar",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "seed": {
            "type": "object",
            "additionalProperties": true
          },
          "similar": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "search": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "web-similar",
          "name": "Similar Page Finder",
          "department": "Search & Web"
        },
        "requested": {
          "query": "x402 paid API marketplace",
          "url": null,
          "intent": "alternatives",
          "site": null,
          "freshness": "any",
          "excludeDomains": [],
          "limit": 5,
          "includeSnippets": true
        },
        "source": {
          "routing": "managed-web-similar",
          "upstreamDetailsDisclosed": false
        },
        "seed": {
          "type": "query",
          "query": "x402 paid API marketplace",
          "derivedQuery": "x402 paid API marketplace alternatives similar tools"
        },
        "search": {
          "query": "x402 paid API marketplace alternatives similar tools",
          "resultCount": 2,
          "checkedAt": "2026-07-07T00:00:00.000Z",
          "durationMs": 510
        },
        "similar": [
          {
            "rank": 1,
            "originalRank": 1,
            "title": "Agent Payment API Guide",
            "url": "https://example.com/agent-payments",
            "domain": "example.com",
            "reason": "Potential alternative or substitute surfaced by the similarity query.",
            "snippet": "A guide to payment-enabled API calls for agents."
          },
          {
            "rank": 2,
            "originalRank": 2,
            "title": "x402 API Examples",
            "url": "https://example.org/x402-examples",
            "domain": "example.org",
            "reason": "Potential alternative or substitute surfaced by the similarity query.",
            "snippet": "Examples of HTTP 402 payment flows."
          }
        ],
        "limits": {
          "maxResults": 10,
          "maxExcludedDomains": 10,
          "timeoutMs": 6000,
          "maxSeedBytes": 32768
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "x402 paid API marketplace",
                "intent": "alternatives",
                "limit": 5,
                "freshness": "any",
                "includeSnippets": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "web-similar",
                  "name": "Similar Page Finder",
                  "department": "Search & Web"
                },
                "requested": {
                  "query": "x402 paid API marketplace",
                  "url": null,
                  "intent": "alternatives",
                  "site": null,
                  "freshness": "any",
                  "excludeDomains": [],
                  "limit": 5,
                  "includeSnippets": true
                },
                "source": {
                  "routing": "managed-web-similar",
                  "upstreamDetailsDisclosed": false
                },
                "seed": {
                  "type": "query",
                  "query": "x402 paid API marketplace",
                  "derivedQuery": "x402 paid API marketplace alternatives similar tools"
                },
                "search": {
                  "query": "x402 paid API marketplace alternatives similar tools",
                  "resultCount": 2,
                  "checkedAt": "2026-07-07T00:00:00.000Z",
                  "durationMs": 510
                },
                "similar": [
                  {
                    "rank": 1,
                    "originalRank": 1,
                    "title": "Agent Payment API Guide",
                    "url": "https://example.com/agent-payments",
                    "domain": "example.com",
                    "reason": "Potential alternative or substitute surfaced by the similarity query.",
                    "snippet": "A guide to payment-enabled API calls for agents."
                  },
                  {
                    "rank": 2,
                    "originalRank": 2,
                    "title": "x402 API Examples",
                    "url": "https://example.org/x402-examples",
                    "domain": "example.org",
                    "reason": "Potential alternative or substitute surfaced by the similarity query.",
                    "snippet": "Examples of HTTP 402 payment flows."
                  }
                ],
                "limits": {
                  "maxResults": 10,
                  "maxExcludedDomains": 10,
                  "timeoutMs": 6000,
                  "maxSeedBytes": 32768
                }
              }
            }
          },
          "routeTemplate": "/api/web/similar",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "query"
                    ],
                    "properties": {
                      "query": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 240,
                        "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages."
                      },
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page."
                      },
                      "intent": {
                        "type": "string",
                        "enum": [
                          "related",
                          "alternatives",
                          "competitors",
                          "sources"
                        ],
                        "default": "related",
                        "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references."
                      },
                      "site": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname."
                      },
                      "excludeDomains": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "maxLength": 120,
                          "description": "Exclude Domains item value for Similar Page Finder. Constraints: max length: 120."
                        },
                        "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 10,
                        "default": 5,
                        "description": "Maximum similar pages to return."
                      },
                      "freshness": {
                        "type": "string",
                        "enum": [
                          "any",
                          "day",
                          "week",
                          "month",
                          "year"
                        ],
                        "default": "any",
                        "description": "Optional freshness preference. Use any when recency is not required."
                      },
                      "includeSnippets": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 6000,
                        "description": "Search and optional seed-page fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "seed",
                      "similar",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "seed": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "similar": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "search": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "web-similar",
            "url": "https://agentbodega.store/api/web/similar",
            "method": "POST",
            "description": "Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.",
            "longDescription": "Purpose: Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nBest use: Use this when an agent needs find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: url, intent, site, excludeDomains, limit, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages. Constraints: min length: 2; max length: 240.\n- url (optional, string): Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page. Constraints: format: uri.\n- intent (optional, string): Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references. Constraints: accepted values: \"related\", \"alternatives\", \"competitors\", \"sources\"; default: \"related\".\n- site (optional, string): Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- excludeDomains (optional, array): Optional domains to omit from returned matches. The seed URL domain is omitted automatically. Constraints: max items: 10.\n- limit (optional, integer): Maximum similar pages to return. Constraints: default: 5; min: 1; max: 10.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons. Constraints: default: true.\n- timeoutMs (optional, integer): Search and optional seed-page fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"x402 paid API marketplace\",\n  \"intent\": \"alternatives\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Similar Page Finder",
            "category": "search-web",
            "kind": "web-similar-tool",
            "tags": [
              "search-web",
              "web",
              "similar",
              "related-pages",
              "alternatives",
              "competitor-research",
              "source-discovery",
              "research",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "query"
              ],
              "optional": [
                "url",
                "intent",
                "site",
                "excludeDomains",
                "limit",
                "freshness",
                "includeSnippets",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": true,
                  "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 240
                  }
                },
                {
                  "name": "url",
                  "type": "string",
                  "required": false,
                  "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "intent",
                  "type": "string",
                  "required": false,
                  "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references.",
                  "constraints": {
                    "enum": [
                      "related",
                      "alternatives",
                      "competitors",
                      "sources"
                    ],
                    "default": "related"
                  }
                },
                {
                  "name": "site",
                  "type": "string",
                  "required": false,
                  "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "excludeDomains",
                  "type": "array",
                  "required": false,
                  "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically.",
                  "constraints": {
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum similar pages to return.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 10
                  }
                },
                {
                  "name": "freshness",
                  "type": "string",
                  "required": false,
                  "description": "Optional freshness preference. Use any when recency is not required.",
                  "constraints": {
                    "enum": [
                      "any",
                      "day",
                      "week",
                      "month",
                      "year"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "includeSnippets",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Search and optional seed-page fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 6000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "x402 paid API marketplace",
                "intent": "alternatives",
                "limit": 5,
                "freshness": "any",
                "includeSnippets": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "query"
              ],
              "properties": {
                "query": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 240,
                  "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page."
                },
                "intent": {
                  "type": "string",
                  "enum": [
                    "related",
                    "alternatives",
                    "competitors",
                    "sources"
                  ],
                  "default": "related",
                  "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references."
                },
                "site": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname."
                },
                "excludeDomains": {
                  "type": "array",
                  "maxItems": 10,
                  "items": {
                    "type": "string",
                    "maxLength": 120,
                    "description": "Exclude Domains item value for Similar Page Finder. Constraints: max length: 120."
                  },
                  "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 10,
                  "default": 5,
                  "description": "Maximum similar pages to return."
                },
                "freshness": {
                  "type": "string",
                  "enum": [
                    "any",
                    "day",
                    "week",
                    "month",
                    "year"
                  ],
                  "default": "any",
                  "description": "Optional freshness preference. Use any when recency is not required."
                },
                "includeSnippets": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 6000,
                  "description": "Search and optional seed-page fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "seed",
                "similar",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "seed": {
                  "type": "object",
                  "additionalProperties": true
                },
                "similar": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "search": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/web/similar",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/web/similar",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "web-similar-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "similar",
          "aisle": "Similar Pages",
          "shelfId": "related-pages",
          "shelf": "Related Pages",
          "offeringId": "web-similar",
          "offering": "Similar Page Finder",
          "pathIds": [
            "search-web",
            "similar",
            "related-pages",
            "web-similar"
          ],
          "pathLabels": [
            "Search & Web",
            "Similar Pages",
            "Related Pages",
            "Similar Page Finder"
          ],
          "taxonomyPath": "search-web.similar.related-pages.web-similar",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "similar",
              "name": "Similar Pages"
            },
            "shelf": {
              "id": "related-pages",
              "name": "Related Pages"
            },
            "offering": {
              "id": "web-similar",
              "name": "Similar Page Finder"
            },
            "pathIds": [
              "search-web",
              "similar",
              "related-pages",
              "web-similar"
            ],
            "pathLabels": [
              "Search & Web",
              "Similar Pages",
              "Related Pages",
              "Similar Page Finder"
            ]
          }
        },
        "description": {
          "short": "Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.",
          "full": "Purpose: Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nBest use: Use this when an agent needs find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: url, intent, site, excludeDomains, limit, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages. Constraints: min length: 2; max length: 240.\n- url (optional, string): Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page. Constraints: format: uri.\n- intent (optional, string): Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references. Constraints: accepted values: \"related\", \"alternatives\", \"competitors\", \"sources\"; default: \"related\".\n- site (optional, string): Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- excludeDomains (optional, array): Optional domains to omit from returned matches. The seed URL domain is omitted automatically. Constraints: max items: 10.\n- limit (optional, integer): Maximum similar pages to return. Constraints: default: 5; min: 1; max: 10.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons. Constraints: default: true.\n- timeoutMs (optional, integer): Search and optional seed-page fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"x402 paid API marketplace\",\n  \"intent\": \"alternatives\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page."
            },
            "intent": {
              "type": "string",
              "enum": [
                "related",
                "alternatives",
                "competitors",
                "sources"
              ],
              "default": "related",
              "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname."
            },
            "excludeDomains": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "maxLength": 120,
                "description": "Exclude Domains item value for Similar Page Finder. Constraints: max length: 120."
              },
              "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum similar pages to return."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "includeSnippets": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and optional seed-page fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page."
            },
            "intent": {
              "type": "string",
              "enum": [
                "related",
                "alternatives",
                "competitors",
                "sources"
              ],
              "default": "related",
              "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname."
            },
            "excludeDomains": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "maxLength": 120,
                "description": "Exclude Domains item value for Similar Page Finder. Constraints: max length: 120."
              },
              "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum similar pages to return."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "includeSnippets": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and optional seed-page fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "query"
          ],
          "optional": [
            "url",
            "intent",
            "site",
            "excludeDomains",
            "limit",
            "freshness",
            "includeSnippets",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": true,
              "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages.",
              "constraints": {
                "minLength": 2,
                "maxLength": 240
              }
            },
            {
              "name": "url",
              "type": "string",
              "required": false,
              "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "intent",
              "type": "string",
              "required": false,
              "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references.",
              "constraints": {
                "enum": [
                  "related",
                  "alternatives",
                  "competitors",
                  "sources"
                ],
                "default": "related"
              }
            },
            {
              "name": "site",
              "type": "string",
              "required": false,
              "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "excludeDomains",
              "type": "array",
              "required": false,
              "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically.",
              "constraints": {
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum similar pages to return.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 10
              }
            },
            {
              "name": "freshness",
              "type": "string",
              "required": false,
              "description": "Optional freshness preference. Use any when recency is not required.",
              "constraints": {
                "enum": [
                  "any",
                  "day",
                  "week",
                  "month",
                  "year"
                ],
                "default": "any"
              }
            },
            {
              "name": "includeSnippets",
              "type": "boolean",
              "required": false,
              "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Search and optional seed-page fetch timeout in milliseconds.",
              "constraints": {
                "default": 6000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "x402 paid API marketplace",
            "intent": "alternatives",
            "limit": 5,
            "freshness": "any",
            "includeSnippets": true
          }
        },
        "exampleRequest": {
          "query": "x402 paid API marketplace",
          "intent": "alternatives",
          "limit": 5,
          "freshness": "any",
          "includeSnippets": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "seed",
            "similar",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "seed": {
              "type": "object",
              "additionalProperties": true
            },
            "similar": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "seed",
            "similar",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "seed": {
              "type": "object",
              "additionalProperties": true
            },
            "similar": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "web-similar",
            "name": "Similar Page Finder",
            "department": "Search & Web"
          },
          "requested": {
            "query": "x402 paid API marketplace",
            "url": null,
            "intent": "alternatives",
            "site": null,
            "freshness": "any",
            "excludeDomains": [],
            "limit": 5,
            "includeSnippets": true
          },
          "source": {
            "routing": "managed-web-similar",
            "upstreamDetailsDisclosed": false
          },
          "seed": {
            "type": "query",
            "query": "x402 paid API marketplace",
            "derivedQuery": "x402 paid API marketplace alternatives similar tools"
          },
          "search": {
            "query": "x402 paid API marketplace alternatives similar tools",
            "resultCount": 2,
            "checkedAt": "2026-07-07T00:00:00.000Z",
            "durationMs": 510
          },
          "similar": [
            {
              "rank": 1,
              "originalRank": 1,
              "title": "Agent Payment API Guide",
              "url": "https://example.com/agent-payments",
              "domain": "example.com",
              "reason": "Potential alternative or substitute surfaced by the similarity query.",
              "snippet": "A guide to payment-enabled API calls for agents."
            },
            {
              "rank": 2,
              "originalRank": 2,
              "title": "x402 API Examples",
              "url": "https://example.org/x402-examples",
              "domain": "example.org",
              "reason": "Potential alternative or substitute surfaced by the similarity query.",
              "snippet": "Examples of HTTP 402 payment flows."
            }
          ],
          "limits": {
            "maxResults": 10,
            "maxExcludedDomains": 10,
            "timeoutMs": 6000,
            "maxSeedBytes": 32768
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/web/answer",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Web Answer",
      "description": "Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.",
      "longDescription": "Purpose: Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nBest use: Use this when an agent needs answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, answerStyle, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Question or research task to answer from public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum search results to inspect before building the answer. Constraints: default: 5; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch and cite. Constraints: default: 3; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- answerStyle (optional, string): Brief returns a shorter answer; standard includes more evidence. Constraints: accepted values: \"brief\", \"standard\"; default: \"standard\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the answer. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"What are x402 paid APIs?\",\n  \"maxSources\": 3,\n  \"answerStyle\": \"standard\",\n  \"freshness\": \"any\"\n}\n```",
      "category": "search-web",
      "kind": "web-answer-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "answer",
      "aisle": "Answer",
      "shelfId": "cited-answers",
      "shelf": "Cited Answers",
      "offeringId": "web-answer",
      "offering": "Web Answer",
      "pathIds": [
        "search-web",
        "answer",
        "cited-answers",
        "web-answer"
      ],
      "pathLabels": [
        "Search & Web",
        "Answer",
        "Cited Answers",
        "Web Answer"
      ],
      "taxonomyPath": "search-web.answer.cited-answers.web-answer",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "answer",
          "name": "Answer"
        },
        "shelf": {
          "id": "cited-answers",
          "name": "Cited Answers"
        },
        "offering": {
          "id": "web-answer",
          "name": "Web Answer"
        },
        "pathIds": [
          "search-web",
          "answer",
          "cited-answers",
          "web-answer"
        ],
        "pathLabels": [
          "Search & Web",
          "Answer",
          "Cited Answers",
          "Web Answer"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "answer",
        "citations",
        "source-grounded",
        "research",
        "summary",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 240,
            "description": "Question or research task to answer from public web results."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "default": 5,
            "description": "Maximum search results to inspect before building the answer."
          },
          "maxSources": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "default": 3,
            "description": "Maximum result pages to fetch and cite."
          },
          "site": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
          },
          "freshness": {
            "type": "string",
            "enum": [
              "any",
              "day",
              "week",
              "month",
              "year"
            ],
            "default": "any",
            "description": "Optional freshness preference. Use any when recency is not required."
          },
          "answerStyle": {
            "type": "string",
            "enum": [
              "brief",
              "standard"
            ],
            "default": "standard",
            "description": "Brief returns a shorter answer; standard includes more evidence."
          },
          "includeSourceText": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include short source text excerpts used for the answer."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 6000,
            "description": "Search and source fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "query"
        ],
        "optional": [
          "limit",
          "maxSources",
          "site",
          "freshness",
          "answerStyle",
          "includeSourceText",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": true,
            "description": "Question or research task to answer from public web results.",
            "constraints": {
              "minLength": 2,
              "maxLength": 240
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum search results to inspect before building the answer.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 10
            }
          },
          {
            "name": "maxSources",
            "type": "integer",
            "required": false,
            "description": "Maximum result pages to fetch and cite.",
            "constraints": {
              "default": 3,
              "minimum": 1,
              "maximum": 5
            }
          },
          {
            "name": "site",
            "type": "string",
            "required": false,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "freshness",
            "type": "string",
            "required": false,
            "description": "Optional freshness preference. Use any when recency is not required.",
            "constraints": {
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any"
            }
          },
          {
            "name": "answerStyle",
            "type": "string",
            "required": false,
            "description": "Brief returns a shorter answer; standard includes more evidence.",
            "constraints": {
              "enum": [
                "brief",
                "standard"
              ],
              "default": "standard"
            }
          },
          {
            "name": "includeSourceText",
            "type": "boolean",
            "required": false,
            "description": "Set true to include short source text excerpts used for the answer.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Search and source fetch timeout in milliseconds.",
            "constraints": {
              "default": 6000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "What are x402 paid APIs?",
          "maxSources": 3,
          "answerStyle": "standard",
          "freshness": "any"
        }
      },
      "exampleRequest": {
        "query": "What are x402 paid APIs?",
        "maxSources": 3,
        "answerStyle": "standard",
        "freshness": "any"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "answer",
          "sources",
          "search",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "answer": {
            "type": "object",
            "additionalProperties": true
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "search": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "web-answer",
          "name": "Web Answer",
          "department": "Search & Web"
        },
        "requested": {
          "query": "What are x402 paid APIs?",
          "site": null,
          "freshness": "any",
          "limit": 5,
          "maxSources": 3,
          "answerStyle": "standard",
          "includeSourceText": false
        },
        "source": {
          "routing": "managed-web-answer",
          "upstreamDetailsDisclosed": false
        },
        "answer": {
          "summary": "x402 paid APIs are HTTP endpoints that return a payment challenge before fulfillment, then provide the requested JSON result after payment settlement.",
          "confidence": "medium",
          "method": "extractive_cited_summary",
          "generatedAt": "2026-07-07T00:00:00.000Z"
        },
        "sources": [
          {
            "rank": 1,
            "title": "x402 API Examples",
            "url": "https://example.org/x402-examples",
            "domain": "example.org",
            "snippet": "Examples of HTTP 402 payment flows.",
            "used": true
          }
        ],
        "search": {
          "resultCount": 2,
          "fetchedSources": 1,
          "checkedAt": "2026-07-07T00:00:00.000Z",
          "durationMs": 830
        },
        "limits": {
          "maxResults": 10,
          "maxSources": 5,
          "timeoutMs": 6000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "What are x402 paid APIs?",
                "maxSources": 3,
                "answerStyle": "standard",
                "freshness": "any"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "web-answer",
                  "name": "Web Answer",
                  "department": "Search & Web"
                },
                "requested": {
                  "query": "What are x402 paid APIs?",
                  "site": null,
                  "freshness": "any",
                  "limit": 5,
                  "maxSources": 3,
                  "answerStyle": "standard",
                  "includeSourceText": false
                },
                "source": {
                  "routing": "managed-web-answer",
                  "upstreamDetailsDisclosed": false
                },
                "answer": {
                  "summary": "x402 paid APIs are HTTP endpoints that return a payment challenge before fulfillment, then provide the requested JSON result after payment settlement.",
                  "confidence": "medium",
                  "method": "extractive_cited_summary",
                  "generatedAt": "2026-07-07T00:00:00.000Z"
                },
                "sources": [
                  {
                    "rank": 1,
                    "title": "x402 API Examples",
                    "url": "https://example.org/x402-examples",
                    "domain": "example.org",
                    "snippet": "Examples of HTTP 402 payment flows.",
                    "used": true
                  }
                ],
                "search": {
                  "resultCount": 2,
                  "fetchedSources": 1,
                  "checkedAt": "2026-07-07T00:00:00.000Z",
                  "durationMs": 830
                },
                "limits": {
                  "maxResults": 10,
                  "maxSources": 5,
                  "timeoutMs": 6000
                }
              }
            }
          },
          "routeTemplate": "/api/web/answer",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "query"
                    ],
                    "properties": {
                      "query": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 240,
                        "description": "Question or research task to answer from public web results."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 10,
                        "default": 5,
                        "description": "Maximum search results to inspect before building the answer."
                      },
                      "maxSources": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 5,
                        "default": 3,
                        "description": "Maximum result pages to fetch and cite."
                      },
                      "site": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                      },
                      "freshness": {
                        "type": "string",
                        "enum": [
                          "any",
                          "day",
                          "week",
                          "month",
                          "year"
                        ],
                        "default": "any",
                        "description": "Optional freshness preference. Use any when recency is not required."
                      },
                      "answerStyle": {
                        "type": "string",
                        "enum": [
                          "brief",
                          "standard"
                        ],
                        "default": "standard",
                        "description": "Brief returns a shorter answer; standard includes more evidence."
                      },
                      "includeSourceText": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include short source text excerpts used for the answer."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 6000,
                        "description": "Search and source fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "answer",
                      "sources",
                      "search",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "answer": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "sources": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "search": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "web-answer",
            "url": "https://agentbodega.store/api/web/answer",
            "method": "POST",
            "description": "Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.",
            "longDescription": "Purpose: Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nBest use: Use this when an agent needs answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, answerStyle, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Question or research task to answer from public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum search results to inspect before building the answer. Constraints: default: 5; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch and cite. Constraints: default: 3; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- answerStyle (optional, string): Brief returns a shorter answer; standard includes more evidence. Constraints: accepted values: \"brief\", \"standard\"; default: \"standard\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the answer. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"What are x402 paid APIs?\",\n  \"maxSources\": 3,\n  \"answerStyle\": \"standard\",\n  \"freshness\": \"any\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Web Answer",
            "category": "search-web",
            "kind": "web-answer-tool",
            "tags": [
              "search-web",
              "web",
              "answer",
              "citations",
              "source-grounded",
              "research",
              "summary",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "query"
              ],
              "optional": [
                "limit",
                "maxSources",
                "site",
                "freshness",
                "answerStyle",
                "includeSourceText",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": true,
                  "description": "Question or research task to answer from public web results.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 240
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum search results to inspect before building the answer.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 10
                  }
                },
                {
                  "name": "maxSources",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum result pages to fetch and cite.",
                  "constraints": {
                    "default": 3,
                    "minimum": 1,
                    "maximum": 5
                  }
                },
                {
                  "name": "site",
                  "type": "string",
                  "required": false,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "freshness",
                  "type": "string",
                  "required": false,
                  "description": "Optional freshness preference. Use any when recency is not required.",
                  "constraints": {
                    "enum": [
                      "any",
                      "day",
                      "week",
                      "month",
                      "year"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "answerStyle",
                  "type": "string",
                  "required": false,
                  "description": "Brief returns a shorter answer; standard includes more evidence.",
                  "constraints": {
                    "enum": [
                      "brief",
                      "standard"
                    ],
                    "default": "standard"
                  }
                },
                {
                  "name": "includeSourceText",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include short source text excerpts used for the answer.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Search and source fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 6000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "What are x402 paid APIs?",
                "maxSources": 3,
                "answerStyle": "standard",
                "freshness": "any"
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "query"
              ],
              "properties": {
                "query": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 240,
                  "description": "Question or research task to answer from public web results."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 10,
                  "default": 5,
                  "description": "Maximum search results to inspect before building the answer."
                },
                "maxSources": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 5,
                  "default": 3,
                  "description": "Maximum result pages to fetch and cite."
                },
                "site": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                },
                "freshness": {
                  "type": "string",
                  "enum": [
                    "any",
                    "day",
                    "week",
                    "month",
                    "year"
                  ],
                  "default": "any",
                  "description": "Optional freshness preference. Use any when recency is not required."
                },
                "answerStyle": {
                  "type": "string",
                  "enum": [
                    "brief",
                    "standard"
                  ],
                  "default": "standard",
                  "description": "Brief returns a shorter answer; standard includes more evidence."
                },
                "includeSourceText": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include short source text excerpts used for the answer."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 6000,
                  "description": "Search and source fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "answer",
                "sources",
                "search",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "answer": {
                  "type": "object",
                  "additionalProperties": true
                },
                "sources": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "search": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/web/answer",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/web/answer",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "web-answer-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "answer",
          "aisle": "Answer",
          "shelfId": "cited-answers",
          "shelf": "Cited Answers",
          "offeringId": "web-answer",
          "offering": "Web Answer",
          "pathIds": [
            "search-web",
            "answer",
            "cited-answers",
            "web-answer"
          ],
          "pathLabels": [
            "Search & Web",
            "Answer",
            "Cited Answers",
            "Web Answer"
          ],
          "taxonomyPath": "search-web.answer.cited-answers.web-answer",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "answer",
              "name": "Answer"
            },
            "shelf": {
              "id": "cited-answers",
              "name": "Cited Answers"
            },
            "offering": {
              "id": "web-answer",
              "name": "Web Answer"
            },
            "pathIds": [
              "search-web",
              "answer",
              "cited-answers",
              "web-answer"
            ],
            "pathLabels": [
              "Search & Web",
              "Answer",
              "Cited Answers",
              "Web Answer"
            ]
          }
        },
        "description": {
          "short": "Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.",
          "full": "Purpose: Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nBest use: Use this when an agent needs answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, answerStyle, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Question or research task to answer from public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum search results to inspect before building the answer. Constraints: default: 5; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch and cite. Constraints: default: 3; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- answerStyle (optional, string): Brief returns a shorter answer; standard includes more evidence. Constraints: accepted values: \"brief\", \"standard\"; default: \"standard\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the answer. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"What are x402 paid APIs?\",\n  \"maxSources\": 3,\n  \"answerStyle\": \"standard\",\n  \"freshness\": \"any\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Question or research task to answer from public web results."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum search results to inspect before building the answer."
            },
            "maxSources": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5,
              "default": 3,
              "description": "Maximum result pages to fetch and cite."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "answerStyle": {
              "type": "string",
              "enum": [
                "brief",
                "standard"
              ],
              "default": "standard",
              "description": "Brief returns a shorter answer; standard includes more evidence."
            },
            "includeSourceText": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include short source text excerpts used for the answer."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and source fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Question or research task to answer from public web results."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum search results to inspect before building the answer."
            },
            "maxSources": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5,
              "default": 3,
              "description": "Maximum result pages to fetch and cite."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "answerStyle": {
              "type": "string",
              "enum": [
                "brief",
                "standard"
              ],
              "default": "standard",
              "description": "Brief returns a shorter answer; standard includes more evidence."
            },
            "includeSourceText": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include short source text excerpts used for the answer."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and source fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "query"
          ],
          "optional": [
            "limit",
            "maxSources",
            "site",
            "freshness",
            "answerStyle",
            "includeSourceText",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": true,
              "description": "Question or research task to answer from public web results.",
              "constraints": {
                "minLength": 2,
                "maxLength": 240
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum search results to inspect before building the answer.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 10
              }
            },
            {
              "name": "maxSources",
              "type": "integer",
              "required": false,
              "description": "Maximum result pages to fetch and cite.",
              "constraints": {
                "default": 3,
                "minimum": 1,
                "maximum": 5
              }
            },
            {
              "name": "site",
              "type": "string",
              "required": false,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "freshness",
              "type": "string",
              "required": false,
              "description": "Optional freshness preference. Use any when recency is not required.",
              "constraints": {
                "enum": [
                  "any",
                  "day",
                  "week",
                  "month",
                  "year"
                ],
                "default": "any"
              }
            },
            {
              "name": "answerStyle",
              "type": "string",
              "required": false,
              "description": "Brief returns a shorter answer; standard includes more evidence.",
              "constraints": {
                "enum": [
                  "brief",
                  "standard"
                ],
                "default": "standard"
              }
            },
            {
              "name": "includeSourceText",
              "type": "boolean",
              "required": false,
              "description": "Set true to include short source text excerpts used for the answer.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Search and source fetch timeout in milliseconds.",
              "constraints": {
                "default": 6000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "What are x402 paid APIs?",
            "maxSources": 3,
            "answerStyle": "standard",
            "freshness": "any"
          }
        },
        "exampleRequest": {
          "query": "What are x402 paid APIs?",
          "maxSources": 3,
          "answerStyle": "standard",
          "freshness": "any"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "answer",
            "sources",
            "search",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "answer": {
              "type": "object",
              "additionalProperties": true
            },
            "sources": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "answer",
            "sources",
            "search",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "answer": {
              "type": "object",
              "additionalProperties": true
            },
            "sources": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "web-answer",
            "name": "Web Answer",
            "department": "Search & Web"
          },
          "requested": {
            "query": "What are x402 paid APIs?",
            "site": null,
            "freshness": "any",
            "limit": 5,
            "maxSources": 3,
            "answerStyle": "standard",
            "includeSourceText": false
          },
          "source": {
            "routing": "managed-web-answer",
            "upstreamDetailsDisclosed": false
          },
          "answer": {
            "summary": "x402 paid APIs are HTTP endpoints that return a payment challenge before fulfillment, then provide the requested JSON result after payment settlement.",
            "confidence": "medium",
            "method": "extractive_cited_summary",
            "generatedAt": "2026-07-07T00:00:00.000Z"
          },
          "sources": [
            {
              "rank": 1,
              "title": "x402 API Examples",
              "url": "https://example.org/x402-examples",
              "domain": "example.org",
              "snippet": "Examples of HTTP 402 payment flows.",
              "used": true
            }
          ],
          "search": {
            "resultCount": 2,
            "fetchedSources": 1,
            "checkedAt": "2026-07-07T00:00:00.000Z",
            "durationMs": 830
          },
          "limits": {
            "maxResults": 10,
            "maxSources": 5,
            "timeoutMs": 6000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/web/research-brief",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Web Research Brief",
      "description": "Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.",
      "longDescription": "Purpose: Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nBest use: Use this when an agent needs bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, format, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum public web results to inspect before selecting sources for the brief. Constraints: default: 8; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch, cite, and use as evidence. Constraints: default: 5; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use day or week for current research and any for evergreen topics. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- format (optional, string): Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured. Constraints: accepted values: \"brief\", \"bullets\", \"json\"; default: \"brief\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the brief. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"best x402 paid API discovery surfaces for agents\",\n  \"limit\": 8,\n  \"maxSources\": 5,\n  \"freshness\": \"week\",\n  \"format\": \"brief\"\n}\n```",
      "category": "search-web",
      "kind": "web-research-brief-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "answer",
      "aisle": "Answer",
      "shelfId": "research-briefs",
      "shelf": "Research Briefs",
      "offeringId": "web-research-brief",
      "offering": "Web Research Brief",
      "pathIds": [
        "search-web",
        "answer",
        "research-briefs",
        "web-research-brief"
      ],
      "pathLabels": [
        "Search & Web",
        "Answer",
        "Research Briefs",
        "Web Research Brief"
      ],
      "taxonomyPath": "search-web.answer.research-briefs.web-research-brief",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "answer",
          "name": "Answer"
        },
        "shelf": {
          "id": "research-briefs",
          "name": "Research Briefs"
        },
        "offering": {
          "id": "web-research-brief",
          "name": "Web Research Brief"
        },
        "pathIds": [
          "search-web",
          "answer",
          "research-briefs",
          "web-research-brief"
        ],
        "pathLabels": [
          "Search & Web",
          "Answer",
          "Research Briefs",
          "Web Research Brief"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "research-brief",
        "citations",
        "source-grounded",
        "summary",
        "decision-support",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "30000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "30000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 240,
            "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "default": 8,
            "description": "Maximum public web results to inspect before selecting sources for the brief."
          },
          "maxSources": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "default": 5,
            "description": "Maximum result pages to fetch, cite, and use as evidence."
          },
          "site": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
          },
          "freshness": {
            "type": "string",
            "enum": [
              "any",
              "day",
              "week",
              "month",
              "year"
            ],
            "default": "any",
            "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics."
          },
          "format": {
            "type": "string",
            "enum": [
              "brief",
              "bullets",
              "json"
            ],
            "default": "brief",
            "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured."
          },
          "includeSourceText": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include short source text excerpts used for the brief."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 6000,
            "description": "Search and source fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "query"
        ],
        "optional": [
          "limit",
          "maxSources",
          "site",
          "freshness",
          "format",
          "includeSourceText",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": true,
            "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources.",
            "constraints": {
              "minLength": 2,
              "maxLength": 240
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum public web results to inspect before selecting sources for the brief.",
            "constraints": {
              "default": 8,
              "minimum": 1,
              "maximum": 10
            }
          },
          {
            "name": "maxSources",
            "type": "integer",
            "required": false,
            "description": "Maximum result pages to fetch, cite, and use as evidence.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 5
            }
          },
          {
            "name": "site",
            "type": "string",
            "required": false,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "freshness",
            "type": "string",
            "required": false,
            "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics.",
            "constraints": {
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any"
            }
          },
          {
            "name": "format",
            "type": "string",
            "required": false,
            "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured.",
            "constraints": {
              "enum": [
                "brief",
                "bullets",
                "json"
              ],
              "default": "brief"
            }
          },
          {
            "name": "includeSourceText",
            "type": "boolean",
            "required": false,
            "description": "Set true to include short source text excerpts used for the brief.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Search and source fetch timeout in milliseconds.",
            "constraints": {
              "default": 6000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "best x402 paid API discovery surfaces for agents",
          "limit": 8,
          "maxSources": 5,
          "freshness": "week",
          "format": "brief"
        }
      },
      "exampleRequest": {
        "query": "best x402 paid API discovery surfaces for agents",
        "limit": 8,
        "maxSources": 5,
        "freshness": "week",
        "format": "brief"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "brief",
          "citations",
          "sources",
          "search",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "brief": {
            "type": "object",
            "additionalProperties": true
          },
          "citations": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "search": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          },
          "providerMessage": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "web-research-brief",
          "name": "Web Research Brief",
          "department": "Search & Web"
        },
        "requested": {
          "query": "best x402 paid API discovery surfaces for agents",
          "site": null,
          "freshness": "week",
          "limit": 8,
          "maxSources": 5,
          "format": "brief",
          "includeSourceText": false
        },
        "source": {
          "routing": "managed-web-research-brief",
          "upstreamDetailsDisclosed": false
        },
        "brief": {
          "title": "Research brief: best x402 paid API discovery surfaces for agents",
          "summary": "Agents discover paid APIs through MCP directories, x402 indexes, public catalog metadata, and cited examples that explain inputs, outputs, prices, and payment rails.",
          "bullets": [
            "Directory listings help agents find paid resources before they know a specific endpoint.",
            "Cited source URLs let the caller audit where the brief came from."
          ],
          "confidence": "medium",
          "format": "brief",
          "method": "search_fetch_extract_cite",
          "generatedAt": "2026-07-07T00:00:00.000Z"
        },
        "citations": [
          {
            "id": 1,
            "title": "x402 API Examples",
            "url": "https://example.org/x402-examples",
            "domain": "example.org",
            "evidenceCount": 2
          }
        ],
        "sources": [
          {
            "rank": 1,
            "title": "x402 API Examples",
            "url": "https://example.org/x402-examples",
            "domain": "example.org",
            "used": true,
            "evidence": [
              "Examples of HTTP 402 payment flows."
            ]
          }
        ],
        "search": {
          "resultCount": 2,
          "fetchedSources": 1,
          "citedSources": 1,
          "checkedAt": "2026-07-07T00:00:00.000Z",
          "durationMs": 1180
        },
        "limits": {
          "maxResults": 10,
          "maxSources": 5,
          "timeoutMs": 6000,
          "maxSourceBytes": 32768
        },
        "providerMessage": "For related source discovery, page extraction, and cited answers, see https://agentbodega.store/directory?department=search-web"
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "best x402 paid API discovery surfaces for agents",
                "limit": 8,
                "maxSources": 5,
                "freshness": "week",
                "format": "brief"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "web-research-brief",
                  "name": "Web Research Brief",
                  "department": "Search & Web"
                },
                "requested": {
                  "query": "best x402 paid API discovery surfaces for agents",
                  "site": null,
                  "freshness": "week",
                  "limit": 8,
                  "maxSources": 5,
                  "format": "brief",
                  "includeSourceText": false
                },
                "source": {
                  "routing": "managed-web-research-brief",
                  "upstreamDetailsDisclosed": false
                },
                "brief": {
                  "title": "Research brief: best x402 paid API discovery surfaces for agents",
                  "summary": "Agents discover paid APIs through MCP directories, x402 indexes, public catalog metadata, and cited examples that explain inputs, outputs, prices, and payment rails.",
                  "bullets": [
                    "Directory listings help agents find paid resources before they know a specific endpoint.",
                    "Cited source URLs let the caller audit where the brief came from."
                  ],
                  "confidence": "medium",
                  "format": "brief",
                  "method": "search_fetch_extract_cite",
                  "generatedAt": "2026-07-07T00:00:00.000Z"
                },
                "citations": [
                  {
                    "id": 1,
                    "title": "x402 API Examples",
                    "url": "https://example.org/x402-examples",
                    "domain": "example.org",
                    "evidenceCount": 2
                  }
                ],
                "sources": [
                  {
                    "rank": 1,
                    "title": "x402 API Examples",
                    "url": "https://example.org/x402-examples",
                    "domain": "example.org",
                    "used": true,
                    "evidence": [
                      "Examples of HTTP 402 payment flows."
                    ]
                  }
                ],
                "search": {
                  "resultCount": 2,
                  "fetchedSources": 1,
                  "citedSources": 1,
                  "checkedAt": "2026-07-07T00:00:00.000Z",
                  "durationMs": 1180
                },
                "limits": {
                  "maxResults": 10,
                  "maxSources": 5,
                  "timeoutMs": 6000,
                  "maxSourceBytes": 32768
                },
                "providerMessage": "For related source discovery, page extraction, and cited answers, see https://agentbodega.store/directory?department=search-web"
              }
            }
          },
          "routeTemplate": "/api/web/research-brief",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "query"
                    ],
                    "properties": {
                      "query": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 240,
                        "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 10,
                        "default": 8,
                        "description": "Maximum public web results to inspect before selecting sources for the brief."
                      },
                      "maxSources": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 5,
                        "default": 5,
                        "description": "Maximum result pages to fetch, cite, and use as evidence."
                      },
                      "site": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                      },
                      "freshness": {
                        "type": "string",
                        "enum": [
                          "any",
                          "day",
                          "week",
                          "month",
                          "year"
                        ],
                        "default": "any",
                        "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics."
                      },
                      "format": {
                        "type": "string",
                        "enum": [
                          "brief",
                          "bullets",
                          "json"
                        ],
                        "default": "brief",
                        "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured."
                      },
                      "includeSourceText": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include short source text excerpts used for the brief."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 6000,
                        "description": "Search and source fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "brief",
                      "citations",
                      "sources",
                      "search",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "brief": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "citations": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "sources": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "search": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "providerMessage": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "web-research-brief",
            "url": "https://agentbodega.store/api/web/research-brief",
            "method": "POST",
            "description": "Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.",
            "longDescription": "Purpose: Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nBest use: Use this when an agent needs bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, format, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum public web results to inspect before selecting sources for the brief. Constraints: default: 8; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch, cite, and use as evidence. Constraints: default: 5; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use day or week for current research and any for evergreen topics. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- format (optional, string): Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured. Constraints: accepted values: \"brief\", \"bullets\", \"json\"; default: \"brief\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the brief. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"best x402 paid API discovery surfaces for agents\",\n  \"limit\": 8,\n  \"maxSources\": 5,\n  \"freshness\": \"week\",\n  \"format\": \"brief\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Web Research Brief",
            "category": "search-web",
            "kind": "web-research-brief-tool",
            "tags": [
              "search-web",
              "web",
              "research-brief",
              "citations",
              "source-grounded",
              "summary",
              "decision-support",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "query"
              ],
              "optional": [
                "limit",
                "maxSources",
                "site",
                "freshness",
                "format",
                "includeSourceText",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": true,
                  "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 240
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum public web results to inspect before selecting sources for the brief.",
                  "constraints": {
                    "default": 8,
                    "minimum": 1,
                    "maximum": 10
                  }
                },
                {
                  "name": "maxSources",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum result pages to fetch, cite, and use as evidence.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 5
                  }
                },
                {
                  "name": "site",
                  "type": "string",
                  "required": false,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "freshness",
                  "type": "string",
                  "required": false,
                  "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics.",
                  "constraints": {
                    "enum": [
                      "any",
                      "day",
                      "week",
                      "month",
                      "year"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "format",
                  "type": "string",
                  "required": false,
                  "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured.",
                  "constraints": {
                    "enum": [
                      "brief",
                      "bullets",
                      "json"
                    ],
                    "default": "brief"
                  }
                },
                {
                  "name": "includeSourceText",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include short source text excerpts used for the brief.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Search and source fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 6000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "best x402 paid API discovery surfaces for agents",
                "limit": 8,
                "maxSources": 5,
                "freshness": "week",
                "format": "brief"
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "query"
              ],
              "properties": {
                "query": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 240,
                  "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 10,
                  "default": 8,
                  "description": "Maximum public web results to inspect before selecting sources for the brief."
                },
                "maxSources": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 5,
                  "default": 5,
                  "description": "Maximum result pages to fetch, cite, and use as evidence."
                },
                "site": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                },
                "freshness": {
                  "type": "string",
                  "enum": [
                    "any",
                    "day",
                    "week",
                    "month",
                    "year"
                  ],
                  "default": "any",
                  "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics."
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "brief",
                    "bullets",
                    "json"
                  ],
                  "default": "brief",
                  "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured."
                },
                "includeSourceText": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include short source text excerpts used for the brief."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 6000,
                  "description": "Search and source fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "brief",
                "citations",
                "sources",
                "search",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "brief": {
                  "type": "object",
                  "additionalProperties": true
                },
                "citations": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "sources": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "search": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                },
                "providerMessage": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.03"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.03",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/web/research-brief",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.03"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/web/research-brief",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "web-research-brief-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "answer",
          "aisle": "Answer",
          "shelfId": "research-briefs",
          "shelf": "Research Briefs",
          "offeringId": "web-research-brief",
          "offering": "Web Research Brief",
          "pathIds": [
            "search-web",
            "answer",
            "research-briefs",
            "web-research-brief"
          ],
          "pathLabels": [
            "Search & Web",
            "Answer",
            "Research Briefs",
            "Web Research Brief"
          ],
          "taxonomyPath": "search-web.answer.research-briefs.web-research-brief",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "answer",
              "name": "Answer"
            },
            "shelf": {
              "id": "research-briefs",
              "name": "Research Briefs"
            },
            "offering": {
              "id": "web-research-brief",
              "name": "Web Research Brief"
            },
            "pathIds": [
              "search-web",
              "answer",
              "research-briefs",
              "web-research-brief"
            ],
            "pathLabels": [
              "Search & Web",
              "Answer",
              "Research Briefs",
              "Web Research Brief"
            ]
          }
        },
        "description": {
          "short": "Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.",
          "full": "Purpose: Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nBest use: Use this when an agent needs bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, format, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum public web results to inspect before selecting sources for the brief. Constraints: default: 8; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch, cite, and use as evidence. Constraints: default: 5; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use day or week for current research and any for evergreen topics. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- format (optional, string): Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured. Constraints: accepted values: \"brief\", \"bullets\", \"json\"; default: \"brief\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the brief. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"best x402 paid API discovery surfaces for agents\",\n  \"limit\": 8,\n  \"maxSources\": 5,\n  \"freshness\": \"week\",\n  \"format\": \"brief\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 8,
              "description": "Maximum public web results to inspect before selecting sources for the brief."
            },
            "maxSources": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5,
              "default": 5,
              "description": "Maximum result pages to fetch, cite, and use as evidence."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics."
            },
            "format": {
              "type": "string",
              "enum": [
                "brief",
                "bullets",
                "json"
              ],
              "default": "brief",
              "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured."
            },
            "includeSourceText": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include short source text excerpts used for the brief."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and source fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 8,
              "description": "Maximum public web results to inspect before selecting sources for the brief."
            },
            "maxSources": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5,
              "default": 5,
              "description": "Maximum result pages to fetch, cite, and use as evidence."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics."
            },
            "format": {
              "type": "string",
              "enum": [
                "brief",
                "bullets",
                "json"
              ],
              "default": "brief",
              "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured."
            },
            "includeSourceText": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include short source text excerpts used for the brief."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and source fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "query"
          ],
          "optional": [
            "limit",
            "maxSources",
            "site",
            "freshness",
            "format",
            "includeSourceText",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": true,
              "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources.",
              "constraints": {
                "minLength": 2,
                "maxLength": 240
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum public web results to inspect before selecting sources for the brief.",
              "constraints": {
                "default": 8,
                "minimum": 1,
                "maximum": 10
              }
            },
            {
              "name": "maxSources",
              "type": "integer",
              "required": false,
              "description": "Maximum result pages to fetch, cite, and use as evidence.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 5
              }
            },
            {
              "name": "site",
              "type": "string",
              "required": false,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "freshness",
              "type": "string",
              "required": false,
              "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics.",
              "constraints": {
                "enum": [
                  "any",
                  "day",
                  "week",
                  "month",
                  "year"
                ],
                "default": "any"
              }
            },
            {
              "name": "format",
              "type": "string",
              "required": false,
              "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured.",
              "constraints": {
                "enum": [
                  "brief",
                  "bullets",
                  "json"
                ],
                "default": "brief"
              }
            },
            {
              "name": "includeSourceText",
              "type": "boolean",
              "required": false,
              "description": "Set true to include short source text excerpts used for the brief.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Search and source fetch timeout in milliseconds.",
              "constraints": {
                "default": 6000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "best x402 paid API discovery surfaces for agents",
            "limit": 8,
            "maxSources": 5,
            "freshness": "week",
            "format": "brief"
          }
        },
        "exampleRequest": {
          "query": "best x402 paid API discovery surfaces for agents",
          "limit": 8,
          "maxSources": 5,
          "freshness": "week",
          "format": "brief"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "brief",
            "citations",
            "sources",
            "search",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "brief": {
              "type": "object",
              "additionalProperties": true
            },
            "citations": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "sources": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            },
            "providerMessage": {
              "type": "string"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "brief",
            "citations",
            "sources",
            "search",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "brief": {
              "type": "object",
              "additionalProperties": true
            },
            "citations": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "sources": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            },
            "providerMessage": {
              "type": "string"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "web-research-brief",
            "name": "Web Research Brief",
            "department": "Search & Web"
          },
          "requested": {
            "query": "best x402 paid API discovery surfaces for agents",
            "site": null,
            "freshness": "week",
            "limit": 8,
            "maxSources": 5,
            "format": "brief",
            "includeSourceText": false
          },
          "source": {
            "routing": "managed-web-research-brief",
            "upstreamDetailsDisclosed": false
          },
          "brief": {
            "title": "Research brief: best x402 paid API discovery surfaces for agents",
            "summary": "Agents discover paid APIs through MCP directories, x402 indexes, public catalog metadata, and cited examples that explain inputs, outputs, prices, and payment rails.",
            "bullets": [
              "Directory listings help agents find paid resources before they know a specific endpoint.",
              "Cited source URLs let the caller audit where the brief came from."
            ],
            "confidence": "medium",
            "format": "brief",
            "method": "search_fetch_extract_cite",
            "generatedAt": "2026-07-07T00:00:00.000Z"
          },
          "citations": [
            {
              "id": 1,
              "title": "x402 API Examples",
              "url": "https://example.org/x402-examples",
              "domain": "example.org",
              "evidenceCount": 2
            }
          ],
          "sources": [
            {
              "rank": 1,
              "title": "x402 API Examples",
              "url": "https://example.org/x402-examples",
              "domain": "example.org",
              "used": true,
              "evidence": [
                "Examples of HTTP 402 payment flows."
              ]
            }
          ],
          "search": {
            "resultCount": 2,
            "fetchedSources": 1,
            "citedSources": 1,
            "checkedAt": "2026-07-07T00:00:00.000Z",
            "durationMs": 1180
          },
          "limits": {
            "maxResults": 10,
            "maxSources": 5,
            "timeoutMs": 6000,
            "maxSourceBytes": 32768
          },
          "providerMessage": "For related source discovery, page extraction, and cited answers, see https://agentbodega.store/directory?department=search-web"
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/developer/jwt/inspect",
      "type": "http",
      "x402Version": 2,
      "serviceName": "JWT Inspector",
      "description": "Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.",
      "longDescription": "Purpose: Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nBest use: Use this when an agent needs decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: token.\nOptional fields: expectedIssuer, expectedAudience, now, includeRaw.\n\nAccepted fields:\n- token (required, string): Compact JWT string with three dot-separated Base64URL segments. Constraints: min length: 20; max length: 8192.\n- expectedIssuer (optional, string): Optional issuer value to compare with the token iss claim. Constraints: max length: 300.\n- expectedAudience (optional, string): Optional audience value to compare with the token aud claim. Constraints: max length: 300.\n- now (optional, integer): Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time. Constraints: min: 0.\n- includeRaw (optional, boolean): Set true to include the raw header and payload objects. The signature is never returned. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature\",\n  \"expectedIssuer\": \"https://issuer.example\",\n  \"expectedAudience\": \"agent-api\",\n  \"includeRaw\": false\n}\n```",
      "category": "developer-utilities",
      "kind": "jwt-inspection-tool",
      "departmentId": "developer-utilities",
      "department": "Developer Utilities",
      "aisleId": "jwt",
      "aisle": "JWT",
      "shelfId": "inspect",
      "shelf": "Inspect",
      "offeringId": "jwt-inspector",
      "offering": "JWT Inspector",
      "pathIds": [
        "developer-utilities",
        "jwt",
        "inspect",
        "jwt-inspector"
      ],
      "pathLabels": [
        "Developer Utilities",
        "JWT",
        "Inspect",
        "JWT Inspector"
      ],
      "taxonomyPath": "developer-utilities.jwt.inspect.jwt-inspector",
      "layout": {
        "department": {
          "id": "developer-utilities",
          "name": "Developer Utilities"
        },
        "aisle": {
          "id": "jwt",
          "name": "JWT"
        },
        "shelf": {
          "id": "inspect",
          "name": "Inspect"
        },
        "offering": {
          "id": "jwt-inspector",
          "name": "JWT Inspector"
        },
        "pathIds": [
          "developer-utilities",
          "jwt",
          "inspect",
          "jwt-inspector"
        ],
        "pathLabels": [
          "Developer Utilities",
          "JWT",
          "Inspect",
          "JWT Inspector"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "developer-utilities",
        "jwt",
        "auth-debug",
        "token-inspection",
        "api-debug",
        "security",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "token"
        ],
        "properties": {
          "token": {
            "type": "string",
            "minLength": 20,
            "maxLength": 8192,
            "description": "Compact JWT string with three dot-separated Base64URL segments."
          },
          "expectedIssuer": {
            "type": "string",
            "maxLength": 300,
            "description": "Optional issuer value to compare with the token iss claim."
          },
          "expectedAudience": {
            "type": "string",
            "maxLength": 300,
            "description": "Optional audience value to compare with the token aud claim."
          },
          "now": {
            "type": "integer",
            "minimum": 0,
            "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time."
          },
          "includeRaw": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include the raw header and payload objects. The signature is never returned."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "token"
        ],
        "optional": [
          "expectedIssuer",
          "expectedAudience",
          "now",
          "includeRaw"
        ],
        "fields": [
          {
            "name": "token",
            "type": "string",
            "required": true,
            "description": "Compact JWT string with three dot-separated Base64URL segments.",
            "constraints": {
              "minLength": 20,
              "maxLength": 8192
            }
          },
          {
            "name": "expectedIssuer",
            "type": "string",
            "required": false,
            "description": "Optional issuer value to compare with the token iss claim.",
            "constraints": {
              "maxLength": 300
            }
          },
          {
            "name": "expectedAudience",
            "type": "string",
            "required": false,
            "description": "Optional audience value to compare with the token aud claim.",
            "constraints": {
              "maxLength": 300
            }
          },
          {
            "name": "now",
            "type": "integer",
            "required": false,
            "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "includeRaw",
            "type": "boolean",
            "required": false,
            "description": "Set true to include the raw header and payload objects. The signature is never returned.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
          "expectedIssuer": "https://issuer.example",
          "expectedAudience": "agent-api",
          "includeRaw": false
        }
      },
      "exampleRequest": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
        "expectedIssuer": "https://issuer.example",
        "expectedAudience": "agent-api",
        "includeRaw": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "token",
          "header",
          "claims",
          "checks",
          "warnings",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "token": {
            "type": "object",
            "additionalProperties": true
          },
          "header": {
            "type": "object",
            "additionalProperties": true
          },
          "claims": {
            "type": "object",
            "additionalProperties": true
          },
          "checks": {
            "type": "object",
            "additionalProperties": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "jwt-inspector",
          "name": "JWT Inspector",
          "department": "Developer Utilities"
        },
        "requested": {
          "expectedIssuer": "https://issuer.example",
          "expectedAudience": "agent-api",
          "includeRaw": false
        },
        "token": {
          "format": "compact-jwt",
          "segments": 3,
          "signaturePresent": true,
          "signatureVerified": false
        },
        "header": {
          "alg": "HS256",
          "typ": "JWT"
        },
        "claims": {
          "issuer": "https://issuer.example",
          "subject": "user_123",
          "audience": [
            "agent-api"
          ],
          "expiresAt": {
            "unix": 1893456000,
            "iso": "2030-01-01T00:00:00.000Z",
            "status": "valid"
          },
          "issuedAt": {
            "unix": 1704067200,
            "iso": "2024-01-01T00:00:00.000Z"
          }
        },
        "checks": {
          "issuer": "match",
          "audience": "match",
          "expired": false,
          "notBefore": "not_present",
          "issuedAtInFuture": false
        },
        "warnings": [
          "Signature was decoded but not cryptographically verified."
        ],
        "limits": {
          "maxTokenChars": 8192
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
                "expectedIssuer": "https://issuer.example",
                "expectedAudience": "agent-api",
                "includeRaw": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "jwt-inspector",
                  "name": "JWT Inspector",
                  "department": "Developer Utilities"
                },
                "requested": {
                  "expectedIssuer": "https://issuer.example",
                  "expectedAudience": "agent-api",
                  "includeRaw": false
                },
                "token": {
                  "format": "compact-jwt",
                  "segments": 3,
                  "signaturePresent": true,
                  "signatureVerified": false
                },
                "header": {
                  "alg": "HS256",
                  "typ": "JWT"
                },
                "claims": {
                  "issuer": "https://issuer.example",
                  "subject": "user_123",
                  "audience": [
                    "agent-api"
                  ],
                  "expiresAt": {
                    "unix": 1893456000,
                    "iso": "2030-01-01T00:00:00.000Z",
                    "status": "valid"
                  },
                  "issuedAt": {
                    "unix": 1704067200,
                    "iso": "2024-01-01T00:00:00.000Z"
                  }
                },
                "checks": {
                  "issuer": "match",
                  "audience": "match",
                  "expired": false,
                  "notBefore": "not_present",
                  "issuedAtInFuture": false
                },
                "warnings": [
                  "Signature was decoded but not cryptographically verified."
                ],
                "limits": {
                  "maxTokenChars": 8192
                }
              }
            }
          },
          "routeTemplate": "/api/developer/jwt/inspect",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "token"
                    ],
                    "properties": {
                      "token": {
                        "type": "string",
                        "minLength": 20,
                        "maxLength": 8192,
                        "description": "Compact JWT string with three dot-separated Base64URL segments."
                      },
                      "expectedIssuer": {
                        "type": "string",
                        "maxLength": 300,
                        "description": "Optional issuer value to compare with the token iss claim."
                      },
                      "expectedAudience": {
                        "type": "string",
                        "maxLength": 300,
                        "description": "Optional audience value to compare with the token aud claim."
                      },
                      "now": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time."
                      },
                      "includeRaw": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include the raw header and payload objects. The signature is never returned."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "token",
                      "header",
                      "claims",
                      "checks",
                      "warnings",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "token": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "header": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "claims": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checks": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "warnings": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "jwt-inspector",
            "url": "https://agentbodega.store/api/developer/jwt/inspect",
            "method": "POST",
            "description": "Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.",
            "longDescription": "Purpose: Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nBest use: Use this when an agent needs decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: token.\nOptional fields: expectedIssuer, expectedAudience, now, includeRaw.\n\nAccepted fields:\n- token (required, string): Compact JWT string with three dot-separated Base64URL segments. Constraints: min length: 20; max length: 8192.\n- expectedIssuer (optional, string): Optional issuer value to compare with the token iss claim. Constraints: max length: 300.\n- expectedAudience (optional, string): Optional audience value to compare with the token aud claim. Constraints: max length: 300.\n- now (optional, integer): Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time. Constraints: min: 0.\n- includeRaw (optional, boolean): Set true to include the raw header and payload objects. The signature is never returned. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature\",\n  \"expectedIssuer\": \"https://issuer.example\",\n  \"expectedAudience\": \"agent-api\",\n  \"includeRaw\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "JWT Inspector",
            "category": "developer-utilities",
            "kind": "jwt-inspection-tool",
            "tags": [
              "developer-utilities",
              "jwt",
              "auth-debug",
              "token-inspection",
              "api-debug",
              "security",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "token"
              ],
              "optional": [
                "expectedIssuer",
                "expectedAudience",
                "now",
                "includeRaw"
              ],
              "fields": [
                {
                  "name": "token",
                  "type": "string",
                  "required": true,
                  "description": "Compact JWT string with three dot-separated Base64URL segments.",
                  "constraints": {
                    "minLength": 20,
                    "maxLength": 8192
                  }
                },
                {
                  "name": "expectedIssuer",
                  "type": "string",
                  "required": false,
                  "description": "Optional issuer value to compare with the token iss claim.",
                  "constraints": {
                    "maxLength": 300
                  }
                },
                {
                  "name": "expectedAudience",
                  "type": "string",
                  "required": false,
                  "description": "Optional audience value to compare with the token aud claim.",
                  "constraints": {
                    "maxLength": 300
                  }
                },
                {
                  "name": "now",
                  "type": "integer",
                  "required": false,
                  "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "includeRaw",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include the raw header and payload objects. The signature is never returned.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
                "expectedIssuer": "https://issuer.example",
                "expectedAudience": "agent-api",
                "includeRaw": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "token"
              ],
              "properties": {
                "token": {
                  "type": "string",
                  "minLength": 20,
                  "maxLength": 8192,
                  "description": "Compact JWT string with three dot-separated Base64URL segments."
                },
                "expectedIssuer": {
                  "type": "string",
                  "maxLength": 300,
                  "description": "Optional issuer value to compare with the token iss claim."
                },
                "expectedAudience": {
                  "type": "string",
                  "maxLength": 300,
                  "description": "Optional audience value to compare with the token aud claim."
                },
                "now": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time."
                },
                "includeRaw": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include the raw header and payload objects. The signature is never returned."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "token",
                "header",
                "claims",
                "checks",
                "warnings",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "token": {
                  "type": "object",
                  "additionalProperties": true
                },
                "header": {
                  "type": "object",
                  "additionalProperties": true
                },
                "claims": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checks": {
                  "type": "object",
                  "additionalProperties": true
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/developer/jwt/inspect",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/developer/jwt/inspect",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "developer-utilities",
        "kind": "jwt-inspection-tool",
        "taxonomy": {
          "departmentId": "developer-utilities",
          "department": "Developer Utilities",
          "aisleId": "jwt",
          "aisle": "JWT",
          "shelfId": "inspect",
          "shelf": "Inspect",
          "offeringId": "jwt-inspector",
          "offering": "JWT Inspector",
          "pathIds": [
            "developer-utilities",
            "jwt",
            "inspect",
            "jwt-inspector"
          ],
          "pathLabels": [
            "Developer Utilities",
            "JWT",
            "Inspect",
            "JWT Inspector"
          ],
          "taxonomyPath": "developer-utilities.jwt.inspect.jwt-inspector",
          "layout": {
            "department": {
              "id": "developer-utilities",
              "name": "Developer Utilities"
            },
            "aisle": {
              "id": "jwt",
              "name": "JWT"
            },
            "shelf": {
              "id": "inspect",
              "name": "Inspect"
            },
            "offering": {
              "id": "jwt-inspector",
              "name": "JWT Inspector"
            },
            "pathIds": [
              "developer-utilities",
              "jwt",
              "inspect",
              "jwt-inspector"
            ],
            "pathLabels": [
              "Developer Utilities",
              "JWT",
              "Inspect",
              "JWT Inspector"
            ]
          }
        },
        "description": {
          "short": "Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.",
          "full": "Purpose: Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nBest use: Use this when an agent needs decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: token.\nOptional fields: expectedIssuer, expectedAudience, now, includeRaw.\n\nAccepted fields:\n- token (required, string): Compact JWT string with three dot-separated Base64URL segments. Constraints: min length: 20; max length: 8192.\n- expectedIssuer (optional, string): Optional issuer value to compare with the token iss claim. Constraints: max length: 300.\n- expectedAudience (optional, string): Optional audience value to compare with the token aud claim. Constraints: max length: 300.\n- now (optional, integer): Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time. Constraints: min: 0.\n- includeRaw (optional, boolean): Set true to include the raw header and payload objects. The signature is never returned. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature\",\n  \"expectedIssuer\": \"https://issuer.example\",\n  \"expectedAudience\": \"agent-api\",\n  \"includeRaw\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "token"
          ],
          "properties": {
            "token": {
              "type": "string",
              "minLength": 20,
              "maxLength": 8192,
              "description": "Compact JWT string with three dot-separated Base64URL segments."
            },
            "expectedIssuer": {
              "type": "string",
              "maxLength": 300,
              "description": "Optional issuer value to compare with the token iss claim."
            },
            "expectedAudience": {
              "type": "string",
              "maxLength": 300,
              "description": "Optional audience value to compare with the token aud claim."
            },
            "now": {
              "type": "integer",
              "minimum": 0,
              "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time."
            },
            "includeRaw": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include the raw header and payload objects. The signature is never returned."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "token"
          ],
          "properties": {
            "token": {
              "type": "string",
              "minLength": 20,
              "maxLength": 8192,
              "description": "Compact JWT string with three dot-separated Base64URL segments."
            },
            "expectedIssuer": {
              "type": "string",
              "maxLength": 300,
              "description": "Optional issuer value to compare with the token iss claim."
            },
            "expectedAudience": {
              "type": "string",
              "maxLength": 300,
              "description": "Optional audience value to compare with the token aud claim."
            },
            "now": {
              "type": "integer",
              "minimum": 0,
              "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time."
            },
            "includeRaw": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include the raw header and payload objects. The signature is never returned."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "token"
          ],
          "optional": [
            "expectedIssuer",
            "expectedAudience",
            "now",
            "includeRaw"
          ],
          "fields": [
            {
              "name": "token",
              "type": "string",
              "required": true,
              "description": "Compact JWT string with three dot-separated Base64URL segments.",
              "constraints": {
                "minLength": 20,
                "maxLength": 8192
              }
            },
            {
              "name": "expectedIssuer",
              "type": "string",
              "required": false,
              "description": "Optional issuer value to compare with the token iss claim.",
              "constraints": {
                "maxLength": 300
              }
            },
            {
              "name": "expectedAudience",
              "type": "string",
              "required": false,
              "description": "Optional audience value to compare with the token aud claim.",
              "constraints": {
                "maxLength": 300
              }
            },
            {
              "name": "now",
              "type": "integer",
              "required": false,
              "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "includeRaw",
              "type": "boolean",
              "required": false,
              "description": "Set true to include the raw header and payload objects. The signature is never returned.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
            "expectedIssuer": "https://issuer.example",
            "expectedAudience": "agent-api",
            "includeRaw": false
          }
        },
        "exampleRequest": {
          "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
          "expectedIssuer": "https://issuer.example",
          "expectedAudience": "agent-api",
          "includeRaw": false
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "token",
            "header",
            "claims",
            "checks",
            "warnings",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "token": {
              "type": "object",
              "additionalProperties": true
            },
            "header": {
              "type": "object",
              "additionalProperties": true
            },
            "claims": {
              "type": "object",
              "additionalProperties": true
            },
            "checks": {
              "type": "object",
              "additionalProperties": true
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "token",
            "header",
            "claims",
            "checks",
            "warnings",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "token": {
              "type": "object",
              "additionalProperties": true
            },
            "header": {
              "type": "object",
              "additionalProperties": true
            },
            "claims": {
              "type": "object",
              "additionalProperties": true
            },
            "checks": {
              "type": "object",
              "additionalProperties": true
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "jwt-inspector",
            "name": "JWT Inspector",
            "department": "Developer Utilities"
          },
          "requested": {
            "expectedIssuer": "https://issuer.example",
            "expectedAudience": "agent-api",
            "includeRaw": false
          },
          "token": {
            "format": "compact-jwt",
            "segments": 3,
            "signaturePresent": true,
            "signatureVerified": false
          },
          "header": {
            "alg": "HS256",
            "typ": "JWT"
          },
          "claims": {
            "issuer": "https://issuer.example",
            "subject": "user_123",
            "audience": [
              "agent-api"
            ],
            "expiresAt": {
              "unix": 1893456000,
              "iso": "2030-01-01T00:00:00.000Z",
              "status": "valid"
            },
            "issuedAt": {
              "unix": 1704067200,
              "iso": "2024-01-01T00:00:00.000Z"
            }
          },
          "checks": {
            "issuer": "match",
            "audience": "match",
            "expired": false,
            "notBefore": "not_present",
            "issuedAtInFuture": false
          },
          "warnings": [
            "Signature was decoded but not cryptographically verified."
          ],
          "limits": {
            "maxTokenChars": 8192
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/developer/webhook/debug",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Webhook Debugger",
      "description": "Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.",
      "longDescription": "Purpose: Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nBest use: Use this when an agent needs inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: headers, body.\nOptional fields: method, url, expectedContentType, signatureHeader, signatureSecret, signatureAlgorithm, timestampHeader, timestampToleranceSeconds, redactFields, includeBody.\n\nAccepted fields:\n- method (optional, string): HTTP method used by the webhook delivery. Constraints: accepted values: \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"GET\"; default: \"POST\".\n- url (optional, string): Optional public destination URL or callback URL to include in the debugging report. Constraints: format: uri; max length: 500.\n- headers (required, object): Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.\n- body (required, any): Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.\n- expectedContentType (optional, string): Optional content type expectation, such as application/json. Constraints: max length: 120.\n- signatureHeader (optional, string): Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature. Constraints: max length: 120.\n- signatureSecret (optional, string): Optional shared secret for HMAC verification. The secret is used only for this run and is not returned. Constraints: max length: 512.\n- signatureAlgorithm (optional, string): HMAC algorithm used when signatureSecret and signatureHeader are supplied. Constraints: accepted values: \"sha256\", \"sha1\", \"sha512\"; default: \"sha256\".\n- timestampHeader (optional, string): Optional header name that contains a delivery timestamp, used for replay-window checks. Constraints: max length: 120.\n- timestampToleranceSeconds (optional, integer): Allowed absolute timestamp age in seconds when timestampHeader is supplied. Constraints: default: 300; min: 1; max: 86400.\n- redactFields (optional, array): Case-insensitive JSON field names to redact before returning parsed body details. Constraints: max items: 20.\n- includeBody (optional, boolean): Set true to include a capped, redacted body excerpt in the response. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"method\": \"POST\",\n  \"url\": \"https://api.example.com/webhooks/orders\",\n  \"headers\": {\n    \"content-type\": \"application/json\",\n    \"x-event-type\": \"order.created\",\n    \"x-delivery-id\": \"evt_123\",\n    \"x-signature\": \"sha256=example\"\n  },\n  \"body\": {\n    \"id\": \"evt_123\",\n    \"type\": \"order.created\",\n    \"data\": {\n      \"orderId\": \"ord_123\",\n      \"amount\": 4900,\n      \"customerEmail\": \"buyer@example.com\"\n    }\n  },\n  \"expectedContentType\": \"application/json\",\n  \"signatureHeader\": \"x-signature\",\n  \"signatureAlgorithm\": \"sha256\",\n  \"timestampHeader\": \"x-webhook-timestamp\",\n  \"redactFields\": [\n    \"customerEmail\"\n  ],\n  \"includeBody\": false\n}\n```",
      "category": "developer-utilities",
      "kind": "webhook-debug-tool",
      "departmentId": "developer-utilities",
      "department": "Developer Utilities",
      "aisleId": "webhooks",
      "aisle": "Webhooks",
      "shelfId": "debug",
      "shelf": "Debug",
      "offeringId": "webhook-debugger",
      "offering": "Webhook Debugger",
      "pathIds": [
        "developer-utilities",
        "webhooks",
        "debug",
        "webhook-debugger"
      ],
      "pathLabels": [
        "Developer Utilities",
        "Webhooks",
        "Debug",
        "Webhook Debugger"
      ],
      "taxonomyPath": "developer-utilities.webhooks.debug.webhook-debugger",
      "layout": {
        "department": {
          "id": "developer-utilities",
          "name": "Developer Utilities"
        },
        "aisle": {
          "id": "webhooks",
          "name": "Webhooks"
        },
        "shelf": {
          "id": "debug",
          "name": "Debug"
        },
        "offering": {
          "id": "webhook-debugger",
          "name": "Webhook Debugger"
        },
        "pathIds": [
          "developer-utilities",
          "webhooks",
          "debug",
          "webhook-debugger"
        ],
        "pathLabels": [
          "Developer Utilities",
          "Webhooks",
          "Debug",
          "Webhook Debugger"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "developer-utilities",
        "webhook",
        "debug",
        "hmac",
        "signature",
        "headers",
        "json",
        "api-debug",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "headers",
          "body"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "POST",
              "PUT",
              "PATCH",
              "DELETE",
              "GET"
            ],
            "default": "POST",
            "description": "HTTP method used by the webhook delivery."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "maxLength": 500,
            "description": "Optional public destination URL or callback URL to include in the debugging report."
          },
          "headers": {
            "type": "object",
            "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.",
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 64
          },
          "body": {
            "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 16384
              },
              {
                "type": "object",
                "additionalProperties": true
              }
            ]
          },
          "expectedContentType": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional content type expectation, such as application/json."
          },
          "signatureHeader": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature."
          },
          "signatureSecret": {
            "type": "string",
            "maxLength": 512,
            "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned."
          },
          "signatureAlgorithm": {
            "type": "string",
            "enum": [
              "sha256",
              "sha1",
              "sha512"
            ],
            "default": "sha256",
            "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied."
          },
          "timestampHeader": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional header name that contains a delivery timestamp, used for replay-window checks."
          },
          "timestampToleranceSeconds": {
            "type": "integer",
            "minimum": 1,
            "maximum": 86400,
            "default": 300,
            "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied."
          },
          "redactFields": {
            "type": "array",
            "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
            "maxItems": 20,
            "items": {
              "type": "string",
              "maxLength": 80,
              "description": "Redact Fields item value for Webhook Debugger. Constraints: max length: 80."
            }
          },
          "includeBody": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include a capped, redacted body excerpt in the response."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "headers",
          "body"
        ],
        "optional": [
          "method",
          "url",
          "expectedContentType",
          "signatureHeader",
          "signatureSecret",
          "signatureAlgorithm",
          "timestampHeader",
          "timestampToleranceSeconds",
          "redactFields",
          "includeBody"
        ],
        "fields": [
          {
            "name": "method",
            "type": "string",
            "required": false,
            "description": "HTTP method used by the webhook delivery.",
            "constraints": {
              "enum": [
                "POST",
                "PUT",
                "PATCH",
                "DELETE",
                "GET"
              ],
              "default": "POST"
            }
          },
          {
            "name": "url",
            "type": "string",
            "required": false,
            "description": "Optional public destination URL or callback URL to include in the debugging report.",
            "constraints": {
              "format": "uri",
              "maxLength": 500
            }
          },
          {
            "name": "headers",
            "type": "object",
            "required": true,
            "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis."
          },
          {
            "name": "body",
            "type": "any",
            "required": true,
            "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing."
          },
          {
            "name": "expectedContentType",
            "type": "string",
            "required": false,
            "description": "Optional content type expectation, such as application/json.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "signatureHeader",
            "type": "string",
            "required": false,
            "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "signatureSecret",
            "type": "string",
            "required": false,
            "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned.",
            "constraints": {
              "maxLength": 512
            }
          },
          {
            "name": "signatureAlgorithm",
            "type": "string",
            "required": false,
            "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied.",
            "constraints": {
              "enum": [
                "sha256",
                "sha1",
                "sha512"
              ],
              "default": "sha256"
            }
          },
          {
            "name": "timestampHeader",
            "type": "string",
            "required": false,
            "description": "Optional header name that contains a delivery timestamp, used for replay-window checks.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "timestampToleranceSeconds",
            "type": "integer",
            "required": false,
            "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied.",
            "constraints": {
              "default": 300,
              "minimum": 1,
              "maximum": 86400
            }
          },
          {
            "name": "redactFields",
            "type": "array",
            "required": false,
            "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
            "constraints": {
              "maxItems": 20
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "includeBody",
            "type": "boolean",
            "required": false,
            "description": "Set true to include a capped, redacted body excerpt in the response.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "method": "POST",
          "url": "https://api.example.com/webhooks/orders",
          "headers": {
            "content-type": "application/json",
            "x-event-type": "order.created",
            "x-delivery-id": "evt_123",
            "x-signature": "sha256=example"
          },
          "body": {
            "id": "evt_123",
            "type": "order.created",
            "data": {
              "orderId": "ord_123",
              "amount": 4900,
              "customerEmail": "buyer@example.com"
            }
          },
          "expectedContentType": "application/json",
          "signatureHeader": "x-signature",
          "signatureAlgorithm": "sha256",
          "timestampHeader": "x-webhook-timestamp",
          "redactFields": [
            "customerEmail"
          ],
          "includeBody": false
        }
      },
      "exampleRequest": {
        "method": "POST",
        "url": "https://api.example.com/webhooks/orders",
        "headers": {
          "content-type": "application/json",
          "x-event-type": "order.created",
          "x-delivery-id": "evt_123",
          "x-signature": "sha256=example"
        },
        "body": {
          "id": "evt_123",
          "type": "order.created",
          "data": {
            "orderId": "ord_123",
            "amount": 4900,
            "customerEmail": "buyer@example.com"
          }
        },
        "expectedContentType": "application/json",
        "signatureHeader": "x-signature",
        "signatureAlgorithm": "sha256",
        "timestampHeader": "x-webhook-timestamp",
        "redactFields": [
          "customerEmail"
        ],
        "includeBody": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "headers",
          "payload",
          "signature",
          "timestamp",
          "warnings",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "headers": {
            "type": "object",
            "additionalProperties": true
          },
          "payload": {
            "type": "object",
            "additionalProperties": true
          },
          "signature": {
            "type": "object",
            "additionalProperties": true
          },
          "timestamp": {
            "type": "object",
            "additionalProperties": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "webhook-debugger",
          "name": "Webhook Debugger",
          "department": "Developer Utilities"
        },
        "requested": {
          "method": "POST",
          "url": "https://api.example.com/webhooks/orders",
          "expectedContentType": "application/json",
          "signatureHeader": "x-signature",
          "signatureAlgorithm": "sha256",
          "timestampHeader": "x-webhook-timestamp",
          "includeBody": false,
          "redactedFields": [
            "apikey",
            "api_key",
            "authorization",
            "customeremail",
            "email",
            "password",
            "secret",
            "token"
          ]
        },
        "headers": {
          "count": 5,
          "normalized": {
            "content-type": "application/json",
            "x-delivery-id": "evt_123",
            "x-event-type": "order.created",
            "x-signature": "[Redacted 71 chars]",
            "x-webhook-timestamp": "1893456000"
          },
          "notable": {
            "contentType": "application/json",
            "userAgent": null,
            "eventType": "order.created",
            "deliveryId": "evt_123"
          }
        },
        "payload": {
          "bodyType": "object",
          "bytes": 98,
          "chars": 98,
          "sha256": "c6f8453a7b3794f3f7eb8f016f891d2d55787e8f1e4d7db8651c2c3c65b4d47d",
          "json": {
            "parsed": true,
            "type": "object",
            "topLevelKeys": [
              "data",
              "id",
              "type"
            ],
            "topLevelKeyCount": 3
          },
          "parseError": null
        },
        "signature": {
          "checked": true,
          "header": "x-signature",
          "algorithm": "sha256",
          "matched": true,
          "presentedFormat": "hex",
          "presentedPrefix": "sha256=4e5b2a1c8d9f",
          "computedPrefix": "4e5b2a1c8d9f"
        },
        "timestamp": {
          "checked": true,
          "header": "x-webhook-timestamp",
          "raw": "1893456000",
          "unix": 1893456000,
          "iso": "2030-01-01T00:00:00.000Z",
          "ageSeconds": 0,
          "toleranceSeconds": 300,
          "withinTolerance": true
        },
        "warnings": [],
        "limits": {
          "maxBodyChars": 16384,
          "maxHeaders": 64,
          "maxHeaderValueChars": 1024,
          "maxRedactFields": 20
        },
        "providerMessage": "For related API inspection, JWT debugging, and source extraction tools, see https://agentbodega.store/directory?department=developer-utilities"
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "method": "POST",
                "url": "https://api.example.com/webhooks/orders",
                "headers": {
                  "content-type": "application/json",
                  "x-event-type": "order.created",
                  "x-delivery-id": "evt_123",
                  "x-signature": "sha256=example"
                },
                "body": {
                  "id": "evt_123",
                  "type": "order.created",
                  "data": {
                    "orderId": "ord_123",
                    "amount": 4900,
                    "customerEmail": "buyer@example.com"
                  }
                },
                "expectedContentType": "application/json",
                "signatureHeader": "x-signature",
                "signatureAlgorithm": "sha256",
                "timestampHeader": "x-webhook-timestamp",
                "redactFields": [
                  "customerEmail"
                ],
                "includeBody": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "webhook-debugger",
                  "name": "Webhook Debugger",
                  "department": "Developer Utilities"
                },
                "requested": {
                  "method": "POST",
                  "url": "https://api.example.com/webhooks/orders",
                  "expectedContentType": "application/json",
                  "signatureHeader": "x-signature",
                  "signatureAlgorithm": "sha256",
                  "timestampHeader": "x-webhook-timestamp",
                  "includeBody": false,
                  "redactedFields": [
                    "apikey",
                    "api_key",
                    "authorization",
                    "customeremail",
                    "email",
                    "password",
                    "secret",
                    "token"
                  ]
                },
                "headers": {
                  "count": 5,
                  "normalized": {
                    "content-type": "application/json",
                    "x-delivery-id": "evt_123",
                    "x-event-type": "order.created",
                    "x-signature": "[Redacted 71 chars]",
                    "x-webhook-timestamp": "1893456000"
                  },
                  "notable": {
                    "contentType": "application/json",
                    "userAgent": null,
                    "eventType": "order.created",
                    "deliveryId": "evt_123"
                  }
                },
                "payload": {
                  "bodyType": "object",
                  "bytes": 98,
                  "chars": 98,
                  "sha256": "c6f8453a7b3794f3f7eb8f016f891d2d55787e8f1e4d7db8651c2c3c65b4d47d",
                  "json": {
                    "parsed": true,
                    "type": "object",
                    "topLevelKeys": [
                      "data",
                      "id",
                      "type"
                    ],
                    "topLevelKeyCount": 3
                  },
                  "parseError": null
                },
                "signature": {
                  "checked": true,
                  "header": "x-signature",
                  "algorithm": "sha256",
                  "matched": true,
                  "presentedFormat": "hex",
                  "presentedPrefix": "sha256=4e5b2a1c8d9f",
                  "computedPrefix": "4e5b2a1c8d9f"
                },
                "timestamp": {
                  "checked": true,
                  "header": "x-webhook-timestamp",
                  "raw": "1893456000",
                  "unix": 1893456000,
                  "iso": "2030-01-01T00:00:00.000Z",
                  "ageSeconds": 0,
                  "toleranceSeconds": 300,
                  "withinTolerance": true
                },
                "warnings": [],
                "limits": {
                  "maxBodyChars": 16384,
                  "maxHeaders": 64,
                  "maxHeaderValueChars": 1024,
                  "maxRedactFields": 20
                },
                "providerMessage": "For related API inspection, JWT debugging, and source extraction tools, see https://agentbodega.store/directory?department=developer-utilities"
              }
            }
          },
          "routeTemplate": "/api/developer/webhook/debug",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "headers",
                      "body"
                    ],
                    "properties": {
                      "method": {
                        "type": "string",
                        "enum": [
                          "POST",
                          "PUT",
                          "PATCH",
                          "DELETE",
                          "GET"
                        ],
                        "default": "POST",
                        "description": "HTTP method used by the webhook delivery."
                      },
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "maxLength": 500,
                        "description": "Optional public destination URL or callback URL to include in the debugging report."
                      },
                      "headers": {
                        "type": "object",
                        "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.",
                        "additionalProperties": {
                          "type": "string"
                        },
                        "maxProperties": 64
                      },
                      "body": {
                        "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 16384
                          },
                          {
                            "type": "object",
                            "additionalProperties": true
                          }
                        ]
                      },
                      "expectedContentType": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional content type expectation, such as application/json."
                      },
                      "signatureHeader": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature."
                      },
                      "signatureSecret": {
                        "type": "string",
                        "maxLength": 512,
                        "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned."
                      },
                      "signatureAlgorithm": {
                        "type": "string",
                        "enum": [
                          "sha256",
                          "sha1",
                          "sha512"
                        ],
                        "default": "sha256",
                        "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied."
                      },
                      "timestampHeader": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional header name that contains a delivery timestamp, used for replay-window checks."
                      },
                      "timestampToleranceSeconds": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 86400,
                        "default": 300,
                        "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied."
                      },
                      "redactFields": {
                        "type": "array",
                        "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
                        "maxItems": 20,
                        "items": {
                          "type": "string",
                          "maxLength": 80,
                          "description": "Redact Fields item value for Webhook Debugger. Constraints: max length: 80."
                        }
                      },
                      "includeBody": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include a capped, redacted body excerpt in the response."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "headers",
                      "payload",
                      "signature",
                      "timestamp",
                      "warnings",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "headers": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "payload": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "signature": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "timestamp": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "warnings": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "webhook-debugger",
            "url": "https://agentbodega.store/api/developer/webhook/debug",
            "method": "POST",
            "description": "Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.",
            "longDescription": "Purpose: Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nBest use: Use this when an agent needs inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: headers, body.\nOptional fields: method, url, expectedContentType, signatureHeader, signatureSecret, signatureAlgorithm, timestampHeader, timestampToleranceSeconds, redactFields, includeBody.\n\nAccepted fields:\n- method (optional, string): HTTP method used by the webhook delivery. Constraints: accepted values: \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"GET\"; default: \"POST\".\n- url (optional, string): Optional public destination URL or callback URL to include in the debugging report. Constraints: format: uri; max length: 500.\n- headers (required, object): Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.\n- body (required, any): Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.\n- expectedContentType (optional, string): Optional content type expectation, such as application/json. Constraints: max length: 120.\n- signatureHeader (optional, string): Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature. Constraints: max length: 120.\n- signatureSecret (optional, string): Optional shared secret for HMAC verification. The secret is used only for this run and is not returned. Constraints: max length: 512.\n- signatureAlgorithm (optional, string): HMAC algorithm used when signatureSecret and signatureHeader are supplied. Constraints: accepted values: \"sha256\", \"sha1\", \"sha512\"; default: \"sha256\".\n- timestampHeader (optional, string): Optional header name that contains a delivery timestamp, used for replay-window checks. Constraints: max length: 120.\n- timestampToleranceSeconds (optional, integer): Allowed absolute timestamp age in seconds when timestampHeader is supplied. Constraints: default: 300; min: 1; max: 86400.\n- redactFields (optional, array): Case-insensitive JSON field names to redact before returning parsed body details. Constraints: max items: 20.\n- includeBody (optional, boolean): Set true to include a capped, redacted body excerpt in the response. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"method\": \"POST\",\n  \"url\": \"https://api.example.com/webhooks/orders\",\n  \"headers\": {\n    \"content-type\": \"application/json\",\n    \"x-event-type\": \"order.created\",\n    \"x-delivery-id\": \"evt_123\",\n    \"x-signature\": \"sha256=example\"\n  },\n  \"body\": {\n    \"id\": \"evt_123\",\n    \"type\": \"order.created\",\n    \"data\": {\n      \"orderId\": \"ord_123\",\n      \"amount\": 4900,\n      \"customerEmail\": \"buyer@example.com\"\n    }\n  },\n  \"expectedContentType\": \"application/json\",\n  \"signatureHeader\": \"x-signature\",\n  \"signatureAlgorithm\": \"sha256\",\n  \"timestampHeader\": \"x-webhook-timestamp\",\n  \"redactFields\": [\n    \"customerEmail\"\n  ],\n  \"includeBody\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Webhook Debugger",
            "category": "developer-utilities",
            "kind": "webhook-debug-tool",
            "tags": [
              "developer-utilities",
              "webhook",
              "debug",
              "hmac",
              "signature",
              "headers",
              "json",
              "api-debug",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "headers",
                "body"
              ],
              "optional": [
                "method",
                "url",
                "expectedContentType",
                "signatureHeader",
                "signatureSecret",
                "signatureAlgorithm",
                "timestampHeader",
                "timestampToleranceSeconds",
                "redactFields",
                "includeBody"
              ],
              "fields": [
                {
                  "name": "method",
                  "type": "string",
                  "required": false,
                  "description": "HTTP method used by the webhook delivery.",
                  "constraints": {
                    "enum": [
                      "POST",
                      "PUT",
                      "PATCH",
                      "DELETE",
                      "GET"
                    ],
                    "default": "POST"
                  }
                },
                {
                  "name": "url",
                  "type": "string",
                  "required": false,
                  "description": "Optional public destination URL or callback URL to include in the debugging report.",
                  "constraints": {
                    "format": "uri",
                    "maxLength": 500
                  }
                },
                {
                  "name": "headers",
                  "type": "object",
                  "required": true,
                  "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis."
                },
                {
                  "name": "body",
                  "type": "any",
                  "required": true,
                  "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing."
                },
                {
                  "name": "expectedContentType",
                  "type": "string",
                  "required": false,
                  "description": "Optional content type expectation, such as application/json.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "signatureHeader",
                  "type": "string",
                  "required": false,
                  "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "signatureSecret",
                  "type": "string",
                  "required": false,
                  "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned.",
                  "constraints": {
                    "maxLength": 512
                  }
                },
                {
                  "name": "signatureAlgorithm",
                  "type": "string",
                  "required": false,
                  "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied.",
                  "constraints": {
                    "enum": [
                      "sha256",
                      "sha1",
                      "sha512"
                    ],
                    "default": "sha256"
                  }
                },
                {
                  "name": "timestampHeader",
                  "type": "string",
                  "required": false,
                  "description": "Optional header name that contains a delivery timestamp, used for replay-window checks.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "timestampToleranceSeconds",
                  "type": "integer",
                  "required": false,
                  "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied.",
                  "constraints": {
                    "default": 300,
                    "minimum": 1,
                    "maximum": 86400
                  }
                },
                {
                  "name": "redactFields",
                  "type": "array",
                  "required": false,
                  "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
                  "constraints": {
                    "maxItems": 20
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "includeBody",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include a capped, redacted body excerpt in the response.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "method": "POST",
                "url": "https://api.example.com/webhooks/orders",
                "headers": {
                  "content-type": "application/json",
                  "x-event-type": "order.created",
                  "x-delivery-id": "evt_123",
                  "x-signature": "sha256=example"
                },
                "body": {
                  "id": "evt_123",
                  "type": "order.created",
                  "data": {
                    "orderId": "ord_123",
                    "amount": 4900,
                    "customerEmail": "buyer@example.com"
                  }
                },
                "expectedContentType": "application/json",
                "signatureHeader": "x-signature",
                "signatureAlgorithm": "sha256",
                "timestampHeader": "x-webhook-timestamp",
                "redactFields": [
                  "customerEmail"
                ],
                "includeBody": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "headers",
                "body"
              ],
              "properties": {
                "method": {
                  "type": "string",
                  "enum": [
                    "POST",
                    "PUT",
                    "PATCH",
                    "DELETE",
                    "GET"
                  ],
                  "default": "POST",
                  "description": "HTTP method used by the webhook delivery."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "maxLength": 500,
                  "description": "Optional public destination URL or callback URL to include in the debugging report."
                },
                "headers": {
                  "type": "object",
                  "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "maxProperties": 64
                },
                "body": {
                  "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.",
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 16384
                    },
                    {
                      "type": "object",
                      "additionalProperties": true
                    }
                  ]
                },
                "expectedContentType": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional content type expectation, such as application/json."
                },
                "signatureHeader": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature."
                },
                "signatureSecret": {
                  "type": "string",
                  "maxLength": 512,
                  "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned."
                },
                "signatureAlgorithm": {
                  "type": "string",
                  "enum": [
                    "sha256",
                    "sha1",
                    "sha512"
                  ],
                  "default": "sha256",
                  "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied."
                },
                "timestampHeader": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional header name that contains a delivery timestamp, used for replay-window checks."
                },
                "timestampToleranceSeconds": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 86400,
                  "default": 300,
                  "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied."
                },
                "redactFields": {
                  "type": "array",
                  "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
                  "maxItems": 20,
                  "items": {
                    "type": "string",
                    "maxLength": 80,
                    "description": "Redact Fields item value for Webhook Debugger. Constraints: max length: 80."
                  }
                },
                "includeBody": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include a capped, redacted body excerpt in the response."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "headers",
                "payload",
                "signature",
                "timestamp",
                "warnings",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "headers": {
                  "type": "object",
                  "additionalProperties": true
                },
                "payload": {
                  "type": "object",
                  "additionalProperties": true
                },
                "signature": {
                  "type": "object",
                  "additionalProperties": true
                },
                "timestamp": {
                  "type": "object",
                  "additionalProperties": true
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/developer/webhook/debug",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/developer/webhook/debug",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "developer-utilities",
        "kind": "webhook-debug-tool",
        "taxonomy": {
          "departmentId": "developer-utilities",
          "department": "Developer Utilities",
          "aisleId": "webhooks",
          "aisle": "Webhooks",
          "shelfId": "debug",
          "shelf": "Debug",
          "offeringId": "webhook-debugger",
          "offering": "Webhook Debugger",
          "pathIds": [
            "developer-utilities",
            "webhooks",
            "debug",
            "webhook-debugger"
          ],
          "pathLabels": [
            "Developer Utilities",
            "Webhooks",
            "Debug",
            "Webhook Debugger"
          ],
          "taxonomyPath": "developer-utilities.webhooks.debug.webhook-debugger",
          "layout": {
            "department": {
              "id": "developer-utilities",
              "name": "Developer Utilities"
            },
            "aisle": {
              "id": "webhooks",
              "name": "Webhooks"
            },
            "shelf": {
              "id": "debug",
              "name": "Debug"
            },
            "offering": {
              "id": "webhook-debugger",
              "name": "Webhook Debugger"
            },
            "pathIds": [
              "developer-utilities",
              "webhooks",
              "debug",
              "webhook-debugger"
            ],
            "pathLabels": [
              "Developer Utilities",
              "Webhooks",
              "Debug",
              "Webhook Debugger"
            ]
          }
        },
        "description": {
          "short": "Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.",
          "full": "Purpose: Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nBest use: Use this when an agent needs inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: headers, body.\nOptional fields: method, url, expectedContentType, signatureHeader, signatureSecret, signatureAlgorithm, timestampHeader, timestampToleranceSeconds, redactFields, includeBody.\n\nAccepted fields:\n- method (optional, string): HTTP method used by the webhook delivery. Constraints: accepted values: \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"GET\"; default: \"POST\".\n- url (optional, string): Optional public destination URL or callback URL to include in the debugging report. Constraints: format: uri; max length: 500.\n- headers (required, object): Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.\n- body (required, any): Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.\n- expectedContentType (optional, string): Optional content type expectation, such as application/json. Constraints: max length: 120.\n- signatureHeader (optional, string): Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature. Constraints: max length: 120.\n- signatureSecret (optional, string): Optional shared secret for HMAC verification. The secret is used only for this run and is not returned. Constraints: max length: 512.\n- signatureAlgorithm (optional, string): HMAC algorithm used when signatureSecret and signatureHeader are supplied. Constraints: accepted values: \"sha256\", \"sha1\", \"sha512\"; default: \"sha256\".\n- timestampHeader (optional, string): Optional header name that contains a delivery timestamp, used for replay-window checks. Constraints: max length: 120.\n- timestampToleranceSeconds (optional, integer): Allowed absolute timestamp age in seconds when timestampHeader is supplied. Constraints: default: 300; min: 1; max: 86400.\n- redactFields (optional, array): Case-insensitive JSON field names to redact before returning parsed body details. Constraints: max items: 20.\n- includeBody (optional, boolean): Set true to include a capped, redacted body excerpt in the response. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"method\": \"POST\",\n  \"url\": \"https://api.example.com/webhooks/orders\",\n  \"headers\": {\n    \"content-type\": \"application/json\",\n    \"x-event-type\": \"order.created\",\n    \"x-delivery-id\": \"evt_123\",\n    \"x-signature\": \"sha256=example\"\n  },\n  \"body\": {\n    \"id\": \"evt_123\",\n    \"type\": \"order.created\",\n    \"data\": {\n      \"orderId\": \"ord_123\",\n      \"amount\": 4900,\n      \"customerEmail\": \"buyer@example.com\"\n    }\n  },\n  \"expectedContentType\": \"application/json\",\n  \"signatureHeader\": \"x-signature\",\n  \"signatureAlgorithm\": \"sha256\",\n  \"timestampHeader\": \"x-webhook-timestamp\",\n  \"redactFields\": [\n    \"customerEmail\"\n  ],\n  \"includeBody\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "headers",
            "body"
          ],
          "properties": {
            "method": {
              "type": "string",
              "enum": [
                "POST",
                "PUT",
                "PATCH",
                "DELETE",
                "GET"
              ],
              "default": "POST",
              "description": "HTTP method used by the webhook delivery."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "maxLength": 500,
              "description": "Optional public destination URL or callback URL to include in the debugging report."
            },
            "headers": {
              "type": "object",
              "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.",
              "additionalProperties": {
                "type": "string"
              },
              "maxProperties": 64
            },
            "body": {
              "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.",
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 16384
                },
                {
                  "type": "object",
                  "additionalProperties": true
                }
              ]
            },
            "expectedContentType": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional content type expectation, such as application/json."
            },
            "signatureHeader": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature."
            },
            "signatureSecret": {
              "type": "string",
              "maxLength": 512,
              "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned."
            },
            "signatureAlgorithm": {
              "type": "string",
              "enum": [
                "sha256",
                "sha1",
                "sha512"
              ],
              "default": "sha256",
              "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied."
            },
            "timestampHeader": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional header name that contains a delivery timestamp, used for replay-window checks."
            },
            "timestampToleranceSeconds": {
              "type": "integer",
              "minimum": 1,
              "maximum": 86400,
              "default": 300,
              "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied."
            },
            "redactFields": {
              "type": "array",
              "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
              "maxItems": 20,
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Redact Fields item value for Webhook Debugger. Constraints: max length: 80."
              }
            },
            "includeBody": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include a capped, redacted body excerpt in the response."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "headers",
            "body"
          ],
          "properties": {
            "method": {
              "type": "string",
              "enum": [
                "POST",
                "PUT",
                "PATCH",
                "DELETE",
                "GET"
              ],
              "default": "POST",
              "description": "HTTP method used by the webhook delivery."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "maxLength": 500,
              "description": "Optional public destination URL or callback URL to include in the debugging report."
            },
            "headers": {
              "type": "object",
              "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.",
              "additionalProperties": {
                "type": "string"
              },
              "maxProperties": 64
            },
            "body": {
              "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.",
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 16384
                },
                {
                  "type": "object",
                  "additionalProperties": true
                }
              ]
            },
            "expectedContentType": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional content type expectation, such as application/json."
            },
            "signatureHeader": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature."
            },
            "signatureSecret": {
              "type": "string",
              "maxLength": 512,
              "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned."
            },
            "signatureAlgorithm": {
              "type": "string",
              "enum": [
                "sha256",
                "sha1",
                "sha512"
              ],
              "default": "sha256",
              "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied."
            },
            "timestampHeader": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional header name that contains a delivery timestamp, used for replay-window checks."
            },
            "timestampToleranceSeconds": {
              "type": "integer",
              "minimum": 1,
              "maximum": 86400,
              "default": 300,
              "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied."
            },
            "redactFields": {
              "type": "array",
              "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
              "maxItems": 20,
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Redact Fields item value for Webhook Debugger. Constraints: max length: 80."
              }
            },
            "includeBody": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include a capped, redacted body excerpt in the response."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "headers",
            "body"
          ],
          "optional": [
            "method",
            "url",
            "expectedContentType",
            "signatureHeader",
            "signatureSecret",
            "signatureAlgorithm",
            "timestampHeader",
            "timestampToleranceSeconds",
            "redactFields",
            "includeBody"
          ],
          "fields": [
            {
              "name": "method",
              "type": "string",
              "required": false,
              "description": "HTTP method used by the webhook delivery.",
              "constraints": {
                "enum": [
                  "POST",
                  "PUT",
                  "PATCH",
                  "DELETE",
                  "GET"
                ],
                "default": "POST"
              }
            },
            {
              "name": "url",
              "type": "string",
              "required": false,
              "description": "Optional public destination URL or callback URL to include in the debugging report.",
              "constraints": {
                "format": "uri",
                "maxLength": 500
              }
            },
            {
              "name": "headers",
              "type": "object",
              "required": true,
              "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis."
            },
            {
              "name": "body",
              "type": "any",
              "required": true,
              "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing."
            },
            {
              "name": "expectedContentType",
              "type": "string",
              "required": false,
              "description": "Optional content type expectation, such as application/json.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "signatureHeader",
              "type": "string",
              "required": false,
              "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "signatureSecret",
              "type": "string",
              "required": false,
              "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned.",
              "constraints": {
                "maxLength": 512
              }
            },
            {
              "name": "signatureAlgorithm",
              "type": "string",
              "required": false,
              "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied.",
              "constraints": {
                "enum": [
                  "sha256",
                  "sha1",
                  "sha512"
                ],
                "default": "sha256"
              }
            },
            {
              "name": "timestampHeader",
              "type": "string",
              "required": false,
              "description": "Optional header name that contains a delivery timestamp, used for replay-window checks.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "timestampToleranceSeconds",
              "type": "integer",
              "required": false,
              "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied.",
              "constraints": {
                "default": 300,
                "minimum": 1,
                "maximum": 86400
              }
            },
            {
              "name": "redactFields",
              "type": "array",
              "required": false,
              "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
              "constraints": {
                "maxItems": 20
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "includeBody",
              "type": "boolean",
              "required": false,
              "description": "Set true to include a capped, redacted body excerpt in the response.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "method": "POST",
            "url": "https://api.example.com/webhooks/orders",
            "headers": {
              "content-type": "application/json",
              "x-event-type": "order.created",
              "x-delivery-id": "evt_123",
              "x-signature": "sha256=example"
            },
            "body": {
              "id": "evt_123",
              "type": "order.created",
              "data": {
                "orderId": "ord_123",
                "amount": 4900,
                "customerEmail": "buyer@example.com"
              }
            },
            "expectedContentType": "application/json",
            "signatureHeader": "x-signature",
            "signatureAlgorithm": "sha256",
            "timestampHeader": "x-webhook-timestamp",
            "redactFields": [
              "customerEmail"
            ],
            "includeBody": false
          }
        },
        "exampleRequest": {
          "method": "POST",
          "url": "https://api.example.com/webhooks/orders",
          "headers": {
            "content-type": "application/json",
            "x-event-type": "order.created",
            "x-delivery-id": "evt_123",
            "x-signature": "sha256=example"
          },
          "body": {
            "id": "evt_123",
            "type": "order.created",
            "data": {
              "orderId": "ord_123",
              "amount": 4900,
              "customerEmail": "buyer@example.com"
            }
          },
          "expectedContentType": "application/json",
          "signatureHeader": "x-signature",
          "signatureAlgorithm": "sha256",
          "timestampHeader": "x-webhook-timestamp",
          "redactFields": [
            "customerEmail"
          ],
          "includeBody": false
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "headers",
            "payload",
            "signature",
            "timestamp",
            "warnings",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "headers": {
              "type": "object",
              "additionalProperties": true
            },
            "payload": {
              "type": "object",
              "additionalProperties": true
            },
            "signature": {
              "type": "object",
              "additionalProperties": true
            },
            "timestamp": {
              "type": "object",
              "additionalProperties": true
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "headers",
            "payload",
            "signature",
            "timestamp",
            "warnings",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "headers": {
              "type": "object",
              "additionalProperties": true
            },
            "payload": {
              "type": "object",
              "additionalProperties": true
            },
            "signature": {
              "type": "object",
              "additionalProperties": true
            },
            "timestamp": {
              "type": "object",
              "additionalProperties": true
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "webhook-debugger",
            "name": "Webhook Debugger",
            "department": "Developer Utilities"
          },
          "requested": {
            "method": "POST",
            "url": "https://api.example.com/webhooks/orders",
            "expectedContentType": "application/json",
            "signatureHeader": "x-signature",
            "signatureAlgorithm": "sha256",
            "timestampHeader": "x-webhook-timestamp",
            "includeBody": false,
            "redactedFields": [
              "apikey",
              "api_key",
              "authorization",
              "customeremail",
              "email",
              "password",
              "secret",
              "token"
            ]
          },
          "headers": {
            "count": 5,
            "normalized": {
              "content-type": "application/json",
              "x-delivery-id": "evt_123",
              "x-event-type": "order.created",
              "x-signature": "[Redacted 71 chars]",
              "x-webhook-timestamp": "1893456000"
            },
            "notable": {
              "contentType": "application/json",
              "userAgent": null,
              "eventType": "order.created",
              "deliveryId": "evt_123"
            }
          },
          "payload": {
            "bodyType": "object",
            "bytes": 98,
            "chars": 98,
            "sha256": "c6f8453a7b3794f3f7eb8f016f891d2d55787e8f1e4d7db8651c2c3c65b4d47d",
            "json": {
              "parsed": true,
              "type": "object",
              "topLevelKeys": [
                "data",
                "id",
                "type"
              ],
              "topLevelKeyCount": 3
            },
            "parseError": null
          },
          "signature": {
            "checked": true,
            "header": "x-signature",
            "algorithm": "sha256",
            "matched": true,
            "presentedFormat": "hex",
            "presentedPrefix": "sha256=4e5b2a1c8d9f",
            "computedPrefix": "4e5b2a1c8d9f"
          },
          "timestamp": {
            "checked": true,
            "header": "x-webhook-timestamp",
            "raw": "1893456000",
            "unix": 1893456000,
            "iso": "2030-01-01T00:00:00.000Z",
            "ageSeconds": 0,
            "toleranceSeconds": 300,
            "withinTolerance": true
          },
          "warnings": [],
          "limits": {
            "maxBodyChars": 16384,
            "maxHeaders": 64,
            "maxHeaderValueChars": 1024,
            "maxRedactFields": 20
          },
          "providerMessage": "For related API inspection, JWT debugging, and source extraction tools, see https://agentbodega.store/directory?department=developer-utilities"
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/web/fetch",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Web Page Fetch",
      "description": "Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.",
      "longDescription": "Purpose: Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nBest use: Use this when an agent needs fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeHtml, includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeHtml (optional, boolean): Set true to return a truncated sanitized HTML excerpt. Constraints: default: false.\n- includeLinks (optional, boolean): Set true to extract normalized outbound and same-page links up to maxLinks. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```",
      "category": "search-web",
      "kind": "web-extraction-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "page-extraction",
      "aisle": "Page Extraction",
      "shelfId": "fetch",
      "shelf": "Fetch",
      "offeringId": "web-fetch",
      "offering": "Web Page Fetch",
      "pathIds": [
        "search-web",
        "page-extraction",
        "fetch",
        "web-fetch"
      ],
      "pathLabels": [
        "Search & Web",
        "Page Extraction",
        "Fetch",
        "Web Page Fetch"
      ],
      "taxonomyPath": "search-web.page-extraction.fetch.web-fetch",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "page-extraction",
          "name": "Page Extraction"
        },
        "shelf": {
          "id": "fetch",
          "name": "Fetch"
        },
        "offering": {
          "id": "web-fetch",
          "name": "Web Page Fetch"
        },
        "pathIds": [
          "search-web",
          "page-extraction",
          "fetch",
          "web-fetch"
        ],
        "pathLabels": [
          "Search & Web",
          "Page Extraction",
          "Fetch",
          "Web Page Fetch"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "fetch",
        "page-extraction",
        "metadata",
        "links",
        "markdown",
        "content-extraction",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected."
          },
          "includeHtml": {
            "type": "boolean",
            "default": false,
            "description": "Set true to return a truncated sanitized HTML excerpt."
          },
          "includeLinks": {
            "type": "boolean",
            "default": true,
            "description": "Set true to extract normalized outbound and same-page links up to maxLinks."
          },
          "maxBytes": {
            "type": "integer",
            "minimum": 1024,
            "maximum": 65536,
            "default": 32768,
            "description": "Maximum response body bytes to read before truncating extraction."
          },
          "maxLinks": {
            "type": "integer",
            "minimum": 0,
            "maximum": 50,
            "default": 20,
            "description": "Maximum links to return when includeLinks is true."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 5000,
            "description": "Fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeHtml",
          "includeLinks",
          "maxBytes",
          "maxLinks",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeHtml",
            "type": "boolean",
            "required": false,
            "description": "Set true to return a truncated sanitized HTML excerpt.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "includeLinks",
            "type": "boolean",
            "required": false,
            "description": "Set true to extract normalized outbound and same-page links up to maxLinks.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "maxBytes",
            "type": "integer",
            "required": false,
            "description": "Maximum response body bytes to read before truncating extraction.",
            "constraints": {
              "default": 32768,
              "minimum": 1024,
              "maximum": 65536
            }
          },
          {
            "name": "maxLinks",
            "type": "integer",
            "required": false,
            "description": "Maximum links to return when includeLinks is true.",
            "constraints": {
              "default": 20,
              "minimum": 0,
              "maximum": 50
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Fetch timeout in milliseconds.",
            "constraints": {
              "default": 5000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeLinks": true,
        "maxBytes": 32768,
        "maxLinks": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "fetched",
          "metadata",
          "text",
          "links",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "fetched": {
            "type": "object",
            "additionalProperties": true
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true
          },
          "text": {
            "type": "object",
            "additionalProperties": true
          },
          "links": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "htmlExcerpt": {
            "type": "string"
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "web-fetch",
          "name": "Web Page Fetch",
          "department": "Search & Web"
        },
        "requested": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        },
        "fetched": {
          "finalUrl": "https://example.com/",
          "status": 200,
          "ok": true,
          "contentType": "text/html; charset=utf-8",
          "truncated": false
        },
        "metadata": {
          "title": "Example Domain",
          "description": "Example page for documentation.",
          "canonical": "https://example.com/"
        },
        "text": {
          "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
          "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
          "characters": 65,
          "words": 10
        },
        "links": [
          {
            "href": "https://www.iana.org/domains/example",
            "text": "More information",
            "rel": ""
          }
        ],
        "limits": {
          "maxBytes": 32768,
          "maxLinks": 10,
          "timeoutMs": 5000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeLinks": true,
                "maxBytes": 32768,
                "maxLinks": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "web-fetch",
                  "name": "Web Page Fetch",
                  "department": "Search & Web"
                },
                "requested": {
                  "url": "https://example.com",
                  "includeLinks": true,
                  "maxBytes": 32768,
                  "maxLinks": 10
                },
                "fetched": {
                  "finalUrl": "https://example.com/",
                  "status": 200,
                  "ok": true,
                  "contentType": "text/html; charset=utf-8",
                  "truncated": false
                },
                "metadata": {
                  "title": "Example Domain",
                  "description": "Example page for documentation.",
                  "canonical": "https://example.com/"
                },
                "text": {
                  "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
                  "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
                  "characters": 65,
                  "words": 10
                },
                "links": [
                  {
                    "href": "https://www.iana.org/domains/example",
                    "text": "More information",
                    "rel": ""
                  }
                ],
                "limits": {
                  "maxBytes": 32768,
                  "maxLinks": 10,
                  "timeoutMs": 5000
                }
              }
            }
          },
          "routeTemplate": "/api/web/fetch",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected."
                      },
                      "includeHtml": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to return a truncated sanitized HTML excerpt."
                      },
                      "includeLinks": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to extract normalized outbound and same-page links up to maxLinks."
                      },
                      "maxBytes": {
                        "type": "integer",
                        "minimum": 1024,
                        "maximum": 65536,
                        "default": 32768,
                        "description": "Maximum response body bytes to read before truncating extraction."
                      },
                      "maxLinks": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 50,
                        "default": 20,
                        "description": "Maximum links to return when includeLinks is true."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 5000,
                        "description": "Fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "fetched",
                      "metadata",
                      "text",
                      "links",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "fetched": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "metadata": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "text": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "links": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "htmlExcerpt": {
                        "type": "string"
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "web-fetch",
            "url": "https://agentbodega.store/api/web/fetch",
            "method": "POST",
            "description": "Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.",
            "longDescription": "Purpose: Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nBest use: Use this when an agent needs fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeHtml, includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeHtml (optional, boolean): Set true to return a truncated sanitized HTML excerpt. Constraints: default: false.\n- includeLinks (optional, boolean): Set true to extract normalized outbound and same-page links up to maxLinks. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Web Page Fetch",
            "category": "search-web",
            "kind": "web-extraction-tool",
            "tags": [
              "search-web",
              "web",
              "fetch",
              "page-extraction",
              "metadata",
              "links",
              "markdown",
              "content-extraction",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeHtml",
                "includeLinks",
                "maxBytes",
                "maxLinks",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeHtml",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to return a truncated sanitized HTML excerpt.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "includeLinks",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to extract normalized outbound and same-page links up to maxLinks.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "maxBytes",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum response body bytes to read before truncating extraction.",
                  "constraints": {
                    "default": 32768,
                    "minimum": 1024,
                    "maximum": 65536
                  }
                },
                {
                  "name": "maxLinks",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum links to return when includeLinks is true.",
                  "constraints": {
                    "default": 20,
                    "minimum": 0,
                    "maximum": 50
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 5000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeLinks": true,
                "maxBytes": 32768,
                "maxLinks": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected."
                },
                "includeHtml": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to return a truncated sanitized HTML excerpt."
                },
                "includeLinks": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to extract normalized outbound and same-page links up to maxLinks."
                },
                "maxBytes": {
                  "type": "integer",
                  "minimum": 1024,
                  "maximum": 65536,
                  "default": 32768,
                  "description": "Maximum response body bytes to read before truncating extraction."
                },
                "maxLinks": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 50,
                  "default": 20,
                  "description": "Maximum links to return when includeLinks is true."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 5000,
                  "description": "Fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "fetched",
                "metadata",
                "text",
                "links",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "fetched": {
                  "type": "object",
                  "additionalProperties": true
                },
                "metadata": {
                  "type": "object",
                  "additionalProperties": true
                },
                "text": {
                  "type": "object",
                  "additionalProperties": true
                },
                "links": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "htmlExcerpt": {
                  "type": "string"
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/web/fetch",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/web/fetch",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "web-extraction-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "page-extraction",
          "aisle": "Page Extraction",
          "shelfId": "fetch",
          "shelf": "Fetch",
          "offeringId": "web-fetch",
          "offering": "Web Page Fetch",
          "pathIds": [
            "search-web",
            "page-extraction",
            "fetch",
            "web-fetch"
          ],
          "pathLabels": [
            "Search & Web",
            "Page Extraction",
            "Fetch",
            "Web Page Fetch"
          ],
          "taxonomyPath": "search-web.page-extraction.fetch.web-fetch",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "page-extraction",
              "name": "Page Extraction"
            },
            "shelf": {
              "id": "fetch",
              "name": "Fetch"
            },
            "offering": {
              "id": "web-fetch",
              "name": "Web Page Fetch"
            },
            "pathIds": [
              "search-web",
              "page-extraction",
              "fetch",
              "web-fetch"
            ],
            "pathLabels": [
              "Search & Web",
              "Page Extraction",
              "Fetch",
              "Web Page Fetch"
            ]
          }
        },
        "description": {
          "short": "Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.",
          "full": "Purpose: Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nBest use: Use this when an agent needs fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeHtml, includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeHtml (optional, boolean): Set true to return a truncated sanitized HTML excerpt. Constraints: default: false.\n- includeLinks (optional, boolean): Set true to extract normalized outbound and same-page links up to maxLinks. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected."
            },
            "includeHtml": {
              "type": "boolean",
              "default": false,
              "description": "Set true to return a truncated sanitized HTML excerpt."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "Set true to extract normalized outbound and same-page links up to maxLinks."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read before truncating extraction."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "Maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected."
            },
            "includeHtml": {
              "type": "boolean",
              "default": false,
              "description": "Set true to return a truncated sanitized HTML excerpt."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "Set true to extract normalized outbound and same-page links up to maxLinks."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read before truncating extraction."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "Maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeHtml",
            "includeLinks",
            "maxBytes",
            "maxLinks",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeHtml",
              "type": "boolean",
              "required": false,
              "description": "Set true to return a truncated sanitized HTML excerpt.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "includeLinks",
              "type": "boolean",
              "required": false,
              "description": "Set true to extract normalized outbound and same-page links up to maxLinks.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "maxBytes",
              "type": "integer",
              "required": false,
              "description": "Maximum response body bytes to read before truncating extraction.",
              "constraints": {
                "default": 32768,
                "minimum": 1024,
                "maximum": 65536
              }
            },
            {
              "name": "maxLinks",
              "type": "integer",
              "required": false,
              "description": "Maximum links to return when includeLinks is true.",
              "constraints": {
                "default": 20,
                "minimum": 0,
                "maximum": 50
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Fetch timeout in milliseconds.",
              "constraints": {
                "default": 5000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeLinks": true,
            "maxBytes": 32768,
            "maxLinks": 10
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "metadata",
            "text",
            "links",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "metadata": {
              "type": "object",
              "additionalProperties": true
            },
            "text": {
              "type": "object",
              "additionalProperties": true
            },
            "links": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "htmlExcerpt": {
              "type": "string"
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "metadata",
            "text",
            "links",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "metadata": {
              "type": "object",
              "additionalProperties": true
            },
            "text": {
              "type": "object",
              "additionalProperties": true
            },
            "links": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "htmlExcerpt": {
              "type": "string"
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "web-fetch",
            "name": "Web Page Fetch",
            "department": "Search & Web"
          },
          "requested": {
            "url": "https://example.com",
            "includeLinks": true,
            "maxBytes": 32768,
            "maxLinks": 10
          },
          "fetched": {
            "finalUrl": "https://example.com/",
            "status": 200,
            "ok": true,
            "contentType": "text/html; charset=utf-8",
            "truncated": false
          },
          "metadata": {
            "title": "Example Domain",
            "description": "Example page for documentation.",
            "canonical": "https://example.com/"
          },
          "text": {
            "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
            "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
            "characters": 65,
            "words": 10
          },
          "links": [
            {
              "href": "https://www.iana.org/domains/example",
              "text": "More information",
              "rel": ""
            }
          ],
          "limits": {
            "maxBytes": 32768,
            "maxLinks": 10,
            "timeoutMs": 5000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/search/link-preview",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Link Preview",
      "description": "Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.",
      "longDescription": "Purpose: Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nBest use: Use this when an agent needs fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeImage, maxBytes, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected. Constraints: format: uri.\n- includeImage (optional, boolean): Set false to omit preview image metadata while still returning title, description, and canonical URL. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read while extracting preview tags. Constraints: default: 32768; min: 1024; max: 65536.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeImage\": true,\n  \"maxBytes\": 32768\n}\n```",
      "category": "search-web",
      "kind": "link-preview-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "page-extraction",
      "aisle": "Page Extraction",
      "shelfId": "link-preview",
      "shelf": "Link Preview",
      "offeringId": "link-preview",
      "offering": "Link Preview",
      "pathIds": [
        "search-web",
        "page-extraction",
        "link-preview",
        "link-preview"
      ],
      "pathLabels": [
        "Search & Web",
        "Page Extraction",
        "Link Preview",
        "Link Preview"
      ],
      "taxonomyPath": "search-web.page-extraction.link-preview.link-preview",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "page-extraction",
          "name": "Page Extraction"
        },
        "shelf": {
          "id": "link-preview",
          "name": "Link Preview"
        },
        "offering": {
          "id": "link-preview",
          "name": "Link Preview"
        },
        "pathIds": [
          "search-web",
          "page-extraction",
          "link-preview",
          "link-preview"
        ],
        "pathLabels": [
          "Search & Web",
          "Page Extraction",
          "Link Preview",
          "Link Preview"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "link-preview",
        "open-graph",
        "metadata",
        "page-extraction",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected."
          },
          "includeImage": {
            "type": "boolean",
            "default": true,
            "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL."
          },
          "maxBytes": {
            "type": "integer",
            "minimum": 1024,
            "maximum": 65536,
            "default": 32768,
            "description": "Maximum response body bytes to read while extracting preview tags."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 5000,
            "description": "Fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeImage",
          "maxBytes",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeImage",
            "type": "boolean",
            "required": false,
            "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "maxBytes",
            "type": "integer",
            "required": false,
            "description": "Maximum response body bytes to read while extracting preview tags.",
            "constraints": {
              "default": 32768,
              "minimum": 1024,
              "maximum": 65536
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Fetch timeout in milliseconds.",
            "constraints": {
              "default": 5000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeImage": true,
          "maxBytes": 32768
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeImage": true,
        "maxBytes": 32768
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "fetched",
          "preview",
          "signals",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "fetched": {
            "type": "object",
            "additionalProperties": true
          },
          "preview": {
            "type": "object",
            "additionalProperties": true
          },
          "signals": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "link-preview",
          "name": "Link Preview",
          "department": "Search & Web"
        },
        "requested": {
          "url": "https://example.com",
          "includeImage": true,
          "maxBytes": 32768,
          "timeoutMs": 5000
        },
        "source": {
          "routing": "direct-public-fetch",
          "upstreamDetailsDisclosed": false
        },
        "fetched": {
          "finalUrl": "https://example.com/",
          "status": 200,
          "ok": true,
          "contentType": "text/html; charset=utf-8",
          "truncated": false
        },
        "preview": {
          "title": "Example Domain",
          "description": "Example page for documentation.",
          "canonicalUrl": "https://example.com/",
          "url": "https://example.com/",
          "domain": "example.com",
          "siteName": "",
          "type": "",
          "image": null,
          "language": "en"
        },
        "signals": {
          "title": "title",
          "description": "meta:description",
          "canonicalUrl": "link:canonical",
          "siteName": "none",
          "type": "none",
          "image": "none"
        },
        "limits": {
          "maxBytes": 32768,
          "timeoutMs": 5000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeImage": true,
                "maxBytes": 32768
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "link-preview",
                  "name": "Link Preview",
                  "department": "Search & Web"
                },
                "requested": {
                  "url": "https://example.com",
                  "includeImage": true,
                  "maxBytes": 32768,
                  "timeoutMs": 5000
                },
                "source": {
                  "routing": "direct-public-fetch",
                  "upstreamDetailsDisclosed": false
                },
                "fetched": {
                  "finalUrl": "https://example.com/",
                  "status": 200,
                  "ok": true,
                  "contentType": "text/html; charset=utf-8",
                  "truncated": false
                },
                "preview": {
                  "title": "Example Domain",
                  "description": "Example page for documentation.",
                  "canonicalUrl": "https://example.com/",
                  "url": "https://example.com/",
                  "domain": "example.com",
                  "siteName": "",
                  "type": "",
                  "image": null,
                  "language": "en"
                },
                "signals": {
                  "title": "title",
                  "description": "meta:description",
                  "canonicalUrl": "link:canonical",
                  "siteName": "none",
                  "type": "none",
                  "image": "none"
                },
                "limits": {
                  "maxBytes": 32768,
                  "timeoutMs": 5000
                }
              }
            }
          },
          "routeTemplate": "/api/search/link-preview",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected."
                      },
                      "includeImage": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL."
                      },
                      "maxBytes": {
                        "type": "integer",
                        "minimum": 1024,
                        "maximum": 65536,
                        "default": 32768,
                        "description": "Maximum response body bytes to read while extracting preview tags."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 5000,
                        "description": "Fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "fetched",
                      "preview",
                      "signals",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "fetched": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "preview": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "signals": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "link-preview",
            "url": "https://agentbodega.store/api/search/link-preview",
            "method": "POST",
            "description": "Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.",
            "longDescription": "Purpose: Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nBest use: Use this when an agent needs fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeImage, maxBytes, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected. Constraints: format: uri.\n- includeImage (optional, boolean): Set false to omit preview image metadata while still returning title, description, and canonical URL. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read while extracting preview tags. Constraints: default: 32768; min: 1024; max: 65536.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeImage\": true,\n  \"maxBytes\": 32768\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Link Preview",
            "category": "search-web",
            "kind": "link-preview-tool",
            "tags": [
              "search-web",
              "web",
              "link-preview",
              "open-graph",
              "metadata",
              "page-extraction",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeImage",
                "maxBytes",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeImage",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "maxBytes",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum response body bytes to read while extracting preview tags.",
                  "constraints": {
                    "default": 32768,
                    "minimum": 1024,
                    "maximum": 65536
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 5000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeImage": true,
                "maxBytes": 32768
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected."
                },
                "includeImage": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL."
                },
                "maxBytes": {
                  "type": "integer",
                  "minimum": 1024,
                  "maximum": 65536,
                  "default": 32768,
                  "description": "Maximum response body bytes to read while extracting preview tags."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 5000,
                  "description": "Fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "fetched",
                "preview",
                "signals",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "fetched": {
                  "type": "object",
                  "additionalProperties": true
                },
                "preview": {
                  "type": "object",
                  "additionalProperties": true
                },
                "signals": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/search/link-preview",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/search/link-preview",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "link-preview-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "page-extraction",
          "aisle": "Page Extraction",
          "shelfId": "link-preview",
          "shelf": "Link Preview",
          "offeringId": "link-preview",
          "offering": "Link Preview",
          "pathIds": [
            "search-web",
            "page-extraction",
            "link-preview",
            "link-preview"
          ],
          "pathLabels": [
            "Search & Web",
            "Page Extraction",
            "Link Preview",
            "Link Preview"
          ],
          "taxonomyPath": "search-web.page-extraction.link-preview.link-preview",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "page-extraction",
              "name": "Page Extraction"
            },
            "shelf": {
              "id": "link-preview",
              "name": "Link Preview"
            },
            "offering": {
              "id": "link-preview",
              "name": "Link Preview"
            },
            "pathIds": [
              "search-web",
              "page-extraction",
              "link-preview",
              "link-preview"
            ],
            "pathLabels": [
              "Search & Web",
              "Page Extraction",
              "Link Preview",
              "Link Preview"
            ]
          }
        },
        "description": {
          "short": "Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.",
          "full": "Purpose: Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nBest use: Use this when an agent needs fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeImage, maxBytes, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected. Constraints: format: uri.\n- includeImage (optional, boolean): Set false to omit preview image metadata while still returning title, description, and canonical URL. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read while extracting preview tags. Constraints: default: 32768; min: 1024; max: 65536.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeImage\": true,\n  \"maxBytes\": 32768\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected."
            },
            "includeImage": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read while extracting preview tags."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected."
            },
            "includeImage": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read while extracting preview tags."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeImage",
            "maxBytes",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeImage",
              "type": "boolean",
              "required": false,
              "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "maxBytes",
              "type": "integer",
              "required": false,
              "description": "Maximum response body bytes to read while extracting preview tags.",
              "constraints": {
                "default": 32768,
                "minimum": 1024,
                "maximum": 65536
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Fetch timeout in milliseconds.",
              "constraints": {
                "default": 5000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeImage": true,
            "maxBytes": 32768
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeImage": true,
          "maxBytes": 32768
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "preview",
            "signals",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "preview": {
              "type": "object",
              "additionalProperties": true
            },
            "signals": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "preview",
            "signals",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "preview": {
              "type": "object",
              "additionalProperties": true
            },
            "signals": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "link-preview",
            "name": "Link Preview",
            "department": "Search & Web"
          },
          "requested": {
            "url": "https://example.com",
            "includeImage": true,
            "maxBytes": 32768,
            "timeoutMs": 5000
          },
          "source": {
            "routing": "direct-public-fetch",
            "upstreamDetailsDisclosed": false
          },
          "fetched": {
            "finalUrl": "https://example.com/",
            "status": 200,
            "ok": true,
            "contentType": "text/html; charset=utf-8",
            "truncated": false
          },
          "preview": {
            "title": "Example Domain",
            "description": "Example page for documentation.",
            "canonicalUrl": "https://example.com/",
            "url": "https://example.com/",
            "domain": "example.com",
            "siteName": "",
            "type": "",
            "image": null,
            "language": "en"
          },
          "signals": {
            "title": "title",
            "description": "meta:description",
            "canonicalUrl": "link:canonical",
            "siteName": "none",
            "type": "none",
            "image": "none"
          },
          "limits": {
            "maxBytes": 32768,
            "timeoutMs": 5000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/documents/any-to-markdown",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Any URL to Markdown",
      "description": "Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.",
      "longDescription": "Purpose: Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nBest use: Use this when an agent needs convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeLinks (optional, boolean): Set true to include normalized links that were visible in the source content. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating the markdown extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch and extraction timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```",
      "category": "documents-content",
      "kind": "content-extraction-tool",
      "departmentId": "documents-content",
      "department": "Documents & Content",
      "aisleId": "extraction",
      "aisle": "Extraction",
      "shelfId": "url-to-markdown",
      "shelf": "Url To Markdown",
      "offeringId": "any-to-markdown",
      "offering": "Any URL to Markdown",
      "pathIds": [
        "documents-content",
        "extraction",
        "url-to-markdown",
        "any-to-markdown"
      ],
      "pathLabels": [
        "Documents & Content",
        "Extraction",
        "Url To Markdown",
        "Any URL to Markdown"
      ],
      "taxonomyPath": "documents-content.extraction.url-to-markdown.any-to-markdown",
      "layout": {
        "department": {
          "id": "documents-content",
          "name": "Documents & Content"
        },
        "aisle": {
          "id": "extraction",
          "name": "Extraction"
        },
        "shelf": {
          "id": "url-to-markdown",
          "name": "Url To Markdown"
        },
        "offering": {
          "id": "any-to-markdown",
          "name": "Any URL to Markdown"
        },
        "pathIds": [
          "documents-content",
          "extraction",
          "url-to-markdown",
          "any-to-markdown"
        ],
        "pathLabels": [
          "Documents & Content",
          "Extraction",
          "Url To Markdown",
          "Any URL to Markdown"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "documents-content",
        "markdown",
        "content-extraction",
        "rag-prep",
        "clean-text",
        "links",
        "metadata",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected."
          },
          "includeLinks": {
            "type": "boolean",
            "default": true,
            "description": "Set true to include normalized links that were visible in the source content."
          },
          "maxBytes": {
            "type": "integer",
            "minimum": 1024,
            "maximum": 65536,
            "default": 32768,
            "description": "Maximum response body bytes to read before truncating the markdown extraction."
          },
          "maxLinks": {
            "type": "integer",
            "minimum": 0,
            "maximum": 50,
            "default": 20,
            "description": "Maximum links to return when includeLinks is true."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 5000,
            "description": "Fetch and extraction timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeLinks",
          "maxBytes",
          "maxLinks",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeLinks",
            "type": "boolean",
            "required": false,
            "description": "Set true to include normalized links that were visible in the source content.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "maxBytes",
            "type": "integer",
            "required": false,
            "description": "Maximum response body bytes to read before truncating the markdown extraction.",
            "constraints": {
              "default": 32768,
              "minimum": 1024,
              "maximum": 65536
            }
          },
          {
            "name": "maxLinks",
            "type": "integer",
            "required": false,
            "description": "Maximum links to return when includeLinks is true.",
            "constraints": {
              "default": 20,
              "minimum": 0,
              "maximum": 50
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Fetch and extraction timeout in milliseconds.",
            "constraints": {
              "default": 5000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeLinks": true,
        "maxBytes": 32768,
        "maxLinks": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "fetched",
          "metadata",
          "text",
          "links",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "fetched": {
            "type": "object",
            "additionalProperties": true
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true
          },
          "text": {
            "type": "object",
            "additionalProperties": true
          },
          "links": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "any-to-markdown",
          "name": "Any URL to Markdown",
          "department": "Documents & Content"
        },
        "requested": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        },
        "fetched": {
          "finalUrl": "https://example.com/",
          "status": 200,
          "ok": true,
          "contentType": "text/html; charset=utf-8",
          "truncated": false
        },
        "metadata": {
          "title": "Example Domain",
          "description": "Example page for documentation.",
          "canonical": "https://example.com/"
        },
        "text": {
          "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
          "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
          "characters": 65,
          "words": 10
        },
        "links": [
          {
            "href": "https://www.iana.org/domains/example",
            "text": "More information",
            "rel": ""
          }
        ],
        "limits": {
          "maxBytes": 32768,
          "maxLinks": 10,
          "timeoutMs": 5000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeLinks": true,
                "maxBytes": 32768,
                "maxLinks": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "any-to-markdown",
                  "name": "Any URL to Markdown",
                  "department": "Documents & Content"
                },
                "requested": {
                  "url": "https://example.com",
                  "includeLinks": true,
                  "maxBytes": 32768,
                  "maxLinks": 10
                },
                "fetched": {
                  "finalUrl": "https://example.com/",
                  "status": 200,
                  "ok": true,
                  "contentType": "text/html; charset=utf-8",
                  "truncated": false
                },
                "metadata": {
                  "title": "Example Domain",
                  "description": "Example page for documentation.",
                  "canonical": "https://example.com/"
                },
                "text": {
                  "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
                  "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
                  "characters": 65,
                  "words": 10
                },
                "links": [
                  {
                    "href": "https://www.iana.org/domains/example",
                    "text": "More information",
                    "rel": ""
                  }
                ],
                "limits": {
                  "maxBytes": 32768,
                  "maxLinks": 10,
                  "timeoutMs": 5000
                }
              }
            }
          },
          "routeTemplate": "/api/documents/any-to-markdown",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected."
                      },
                      "includeLinks": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to include normalized links that were visible in the source content."
                      },
                      "maxBytes": {
                        "type": "integer",
                        "minimum": 1024,
                        "maximum": 65536,
                        "default": 32768,
                        "description": "Maximum response body bytes to read before truncating the markdown extraction."
                      },
                      "maxLinks": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 50,
                        "default": 20,
                        "description": "Maximum links to return when includeLinks is true."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 5000,
                        "description": "Fetch and extraction timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "fetched",
                      "metadata",
                      "text",
                      "links",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "fetched": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "metadata": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "text": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "links": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "any-to-markdown",
            "url": "https://agentbodega.store/api/documents/any-to-markdown",
            "method": "POST",
            "description": "Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.",
            "longDescription": "Purpose: Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nBest use: Use this when an agent needs convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeLinks (optional, boolean): Set true to include normalized links that were visible in the source content. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating the markdown extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch and extraction timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Any URL to Markdown",
            "category": "documents-content",
            "kind": "content-extraction-tool",
            "tags": [
              "documents-content",
              "markdown",
              "content-extraction",
              "rag-prep",
              "clean-text",
              "links",
              "metadata",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeLinks",
                "maxBytes",
                "maxLinks",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeLinks",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include normalized links that were visible in the source content.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "maxBytes",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum response body bytes to read before truncating the markdown extraction.",
                  "constraints": {
                    "default": 32768,
                    "minimum": 1024,
                    "maximum": 65536
                  }
                },
                {
                  "name": "maxLinks",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum links to return when includeLinks is true.",
                  "constraints": {
                    "default": 20,
                    "minimum": 0,
                    "maximum": 50
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Fetch and extraction timeout in milliseconds.",
                  "constraints": {
                    "default": 5000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeLinks": true,
                "maxBytes": 32768,
                "maxLinks": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected."
                },
                "includeLinks": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to include normalized links that were visible in the source content."
                },
                "maxBytes": {
                  "type": "integer",
                  "minimum": 1024,
                  "maximum": 65536,
                  "default": 32768,
                  "description": "Maximum response body bytes to read before truncating the markdown extraction."
                },
                "maxLinks": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 50,
                  "default": 20,
                  "description": "Maximum links to return when includeLinks is true."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 5000,
                  "description": "Fetch and extraction timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "fetched",
                "metadata",
                "text",
                "links",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "fetched": {
                  "type": "object",
                  "additionalProperties": true
                },
                "metadata": {
                  "type": "object",
                  "additionalProperties": true
                },
                "text": {
                  "type": "object",
                  "additionalProperties": true
                },
                "links": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/documents/any-to-markdown",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/documents/any-to-markdown",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "documents-content",
        "kind": "content-extraction-tool",
        "taxonomy": {
          "departmentId": "documents-content",
          "department": "Documents & Content",
          "aisleId": "extraction",
          "aisle": "Extraction",
          "shelfId": "url-to-markdown",
          "shelf": "Url To Markdown",
          "offeringId": "any-to-markdown",
          "offering": "Any URL to Markdown",
          "pathIds": [
            "documents-content",
            "extraction",
            "url-to-markdown",
            "any-to-markdown"
          ],
          "pathLabels": [
            "Documents & Content",
            "Extraction",
            "Url To Markdown",
            "Any URL to Markdown"
          ],
          "taxonomyPath": "documents-content.extraction.url-to-markdown.any-to-markdown",
          "layout": {
            "department": {
              "id": "documents-content",
              "name": "Documents & Content"
            },
            "aisle": {
              "id": "extraction",
              "name": "Extraction"
            },
            "shelf": {
              "id": "url-to-markdown",
              "name": "Url To Markdown"
            },
            "offering": {
              "id": "any-to-markdown",
              "name": "Any URL to Markdown"
            },
            "pathIds": [
              "documents-content",
              "extraction",
              "url-to-markdown",
              "any-to-markdown"
            ],
            "pathLabels": [
              "Documents & Content",
              "Extraction",
              "Url To Markdown",
              "Any URL to Markdown"
            ]
          }
        },
        "description": {
          "short": "Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.",
          "full": "Purpose: Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nBest use: Use this when an agent needs convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeLinks (optional, boolean): Set true to include normalized links that were visible in the source content. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating the markdown extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch and extraction timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "Set true to include normalized links that were visible in the source content."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read before truncating the markdown extraction."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "Maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch and extraction timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "Set true to include normalized links that were visible in the source content."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read before truncating the markdown extraction."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "Maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch and extraction timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeLinks",
            "maxBytes",
            "maxLinks",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeLinks",
              "type": "boolean",
              "required": false,
              "description": "Set true to include normalized links that were visible in the source content.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "maxBytes",
              "type": "integer",
              "required": false,
              "description": "Maximum response body bytes to read before truncating the markdown extraction.",
              "constraints": {
                "default": 32768,
                "minimum": 1024,
                "maximum": 65536
              }
            },
            {
              "name": "maxLinks",
              "type": "integer",
              "required": false,
              "description": "Maximum links to return when includeLinks is true.",
              "constraints": {
                "default": 20,
                "minimum": 0,
                "maximum": 50
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Fetch and extraction timeout in milliseconds.",
              "constraints": {
                "default": 5000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeLinks": true,
            "maxBytes": 32768,
            "maxLinks": 10
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "metadata",
            "text",
            "links",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "metadata": {
              "type": "object",
              "additionalProperties": true
            },
            "text": {
              "type": "object",
              "additionalProperties": true
            },
            "links": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "metadata",
            "text",
            "links",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "metadata": {
              "type": "object",
              "additionalProperties": true
            },
            "text": {
              "type": "object",
              "additionalProperties": true
            },
            "links": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "any-to-markdown",
            "name": "Any URL to Markdown",
            "department": "Documents & Content"
          },
          "requested": {
            "url": "https://example.com",
            "includeLinks": true,
            "maxBytes": 32768,
            "maxLinks": 10
          },
          "fetched": {
            "finalUrl": "https://example.com/",
            "status": 200,
            "ok": true,
            "contentType": "text/html; charset=utf-8",
            "truncated": false
          },
          "metadata": {
            "title": "Example Domain",
            "description": "Example page for documentation.",
            "canonical": "https://example.com/"
          },
          "text": {
            "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
            "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
            "characters": 65,
            "words": 10
          },
          "links": [
            {
              "href": "https://www.iana.org/domains/example",
              "text": "More information",
              "rel": ""
            }
          ],
          "limits": {
            "maxBytes": 32768,
            "maxLinks": 10,
            "timeoutMs": 5000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/documents/rag-prep",
      "type": "http",
      "x402Version": 2,
      "serviceName": "RAG Prep",
      "description": "Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.",
      "longDescription": "Purpose: Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nBest use: Use this when an agent needs prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: source.\nOptional fields: sourceType, chunkSizeChars, chunkOverlapChars, maxChunks, outputFormat, includeMarkdown, includeLinks, includeKeywords, includeEntities, artifactMode, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- source (required, string): Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text. Constraints: max length: 49152.\n- sourceType (optional, string): How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text. Constraints: accepted values: \"auto\", \"url\", \"text\"; default: \"auto\".\n- chunkSizeChars (optional, integer): Target maximum character count per chunk before overlap is applied. Constraints: default: 1200; min: 200; max: 3000.\n- chunkOverlapChars (optional, integer): Characters copied from the end of the previous chunk into the next chunk. Constraints: default: 120; min: 0; max: 1000.\n- maxChunks (optional, integer): Maximum number of chunks returned. Constraints: default: 50; min: 1; max: 100.\n- outputFormat (optional, string): Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact. Constraints: accepted values: \"json\", \"jsonl\", \"markdown\"; default: \"json\".\n- includeMarkdown (optional, boolean): For URL sources, include the extracted markdown when it fits the response caps. Constraints: default: true.\n- includeLinks (optional, boolean): For URL sources, include normalized links visible in the source content. Constraints: default: true.\n- includeKeywords (optional, boolean): Include lightweight frequency-based keyword hints. Constraints: default: true.\n- includeEntities (optional, boolean): Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference. Constraints: default: false.\n- artifactMode (optional, string): For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery. Constraints: accepted values: \"auto\", \"inline\", \"artifact\"; default: \"auto\".\n- maxBytes (optional, integer): For URL sources, maximum response body bytes to read before extraction is truncated. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): For URL sources, maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): For URL sources, fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"source\": \"https://example.com\",\n  \"sourceType\": \"url\",\n  \"chunkSizeChars\": 900,\n  \"chunkOverlapChars\": 100,\n  \"maxChunks\": 12,\n  \"outputFormat\": \"jsonl\",\n  \"includeLinks\": true,\n  \"includeKeywords\": true,\n  \"artifactMode\": \"auto\"\n}\n```",
      "category": "documents-content",
      "kind": "rag-prep-tool",
      "departmentId": "documents-content",
      "department": "Documents & Content",
      "aisleId": "rag-prep",
      "aisle": "RAG Prep",
      "shelfId": "chunking",
      "shelf": "Chunking",
      "offeringId": "rag-prep",
      "offering": "RAG Prep",
      "pathIds": [
        "documents-content",
        "rag-prep",
        "chunking",
        "rag-prep"
      ],
      "pathLabels": [
        "Documents & Content",
        "RAG Prep",
        "Chunking",
        "RAG Prep"
      ],
      "taxonomyPath": "documents-content.rag-prep.chunking.rag-prep",
      "layout": {
        "department": {
          "id": "documents-content",
          "name": "Documents & Content"
        },
        "aisle": {
          "id": "rag-prep",
          "name": "RAG Prep"
        },
        "shelf": {
          "id": "chunking",
          "name": "Chunking"
        },
        "offering": {
          "id": "rag-prep",
          "name": "RAG Prep"
        },
        "pathIds": [
          "documents-content",
          "rag-prep",
          "chunking",
          "rag-prep"
        ],
        "pathLabels": [
          "Documents & Content",
          "RAG Prep",
          "Chunking",
          "RAG Prep"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "documents-content",
        "rag-prep",
        "chunking",
        "jsonl",
        "markdown",
        "clean-text",
        "keywords",
        "retrieval",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "source"
        ],
        "properties": {
          "source": {
            "type": "string",
            "maxLength": 49152,
            "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text."
          },
          "sourceType": {
            "type": "string",
            "enum": [
              "auto",
              "url",
              "text"
            ],
            "default": "auto",
            "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text."
          },
          "chunkSizeChars": {
            "type": "integer",
            "minimum": 200,
            "maximum": 3000,
            "default": 1200,
            "description": "Target maximum character count per chunk before overlap is applied."
          },
          "chunkOverlapChars": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000,
            "default": 120,
            "description": "Characters copied from the end of the previous chunk into the next chunk."
          },
          "maxChunks": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 50,
            "description": "Maximum number of chunks returned."
          },
          "outputFormat": {
            "type": "string",
            "enum": [
              "json",
              "jsonl",
              "markdown"
            ],
            "default": "json",
            "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact."
          },
          "includeMarkdown": {
            "type": "boolean",
            "default": true,
            "description": "For URL sources, include the extracted markdown when it fits the response caps."
          },
          "includeLinks": {
            "type": "boolean",
            "default": true,
            "description": "For URL sources, include normalized links visible in the source content."
          },
          "includeKeywords": {
            "type": "boolean",
            "default": true,
            "description": "Include lightweight frequency-based keyword hints."
          },
          "includeEntities": {
            "type": "boolean",
            "default": false,
            "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference."
          },
          "artifactMode": {
            "type": "string",
            "enum": [
              "auto",
              "inline",
              "artifact"
            ],
            "default": "auto",
            "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery."
          },
          "maxBytes": {
            "type": "integer",
            "minimum": 1024,
            "maximum": 65536,
            "default": 32768,
            "description": "For URL sources, maximum response body bytes to read before extraction is truncated."
          },
          "maxLinks": {
            "type": "integer",
            "minimum": 0,
            "maximum": 50,
            "default": 20,
            "description": "For URL sources, maximum links to return when includeLinks is true."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 5000,
            "description": "For URL sources, fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "source"
        ],
        "optional": [
          "sourceType",
          "chunkSizeChars",
          "chunkOverlapChars",
          "maxChunks",
          "outputFormat",
          "includeMarkdown",
          "includeLinks",
          "includeKeywords",
          "includeEntities",
          "artifactMode",
          "maxBytes",
          "maxLinks",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "source",
            "type": "string",
            "required": true,
            "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text.",
            "constraints": {
              "maxLength": 49152
            }
          },
          {
            "name": "sourceType",
            "type": "string",
            "required": false,
            "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text.",
            "constraints": {
              "enum": [
                "auto",
                "url",
                "text"
              ],
              "default": "auto"
            }
          },
          {
            "name": "chunkSizeChars",
            "type": "integer",
            "required": false,
            "description": "Target maximum character count per chunk before overlap is applied.",
            "constraints": {
              "default": 1200,
              "minimum": 200,
              "maximum": 3000
            }
          },
          {
            "name": "chunkOverlapChars",
            "type": "integer",
            "required": false,
            "description": "Characters copied from the end of the previous chunk into the next chunk.",
            "constraints": {
              "default": 120,
              "minimum": 0,
              "maximum": 1000
            }
          },
          {
            "name": "maxChunks",
            "type": "integer",
            "required": false,
            "description": "Maximum number of chunks returned.",
            "constraints": {
              "default": 50,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "outputFormat",
            "type": "string",
            "required": false,
            "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact.",
            "constraints": {
              "enum": [
                "json",
                "jsonl",
                "markdown"
              ],
              "default": "json"
            }
          },
          {
            "name": "includeMarkdown",
            "type": "boolean",
            "required": false,
            "description": "For URL sources, include the extracted markdown when it fits the response caps.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeLinks",
            "type": "boolean",
            "required": false,
            "description": "For URL sources, include normalized links visible in the source content.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeKeywords",
            "type": "boolean",
            "required": false,
            "description": "Include lightweight frequency-based keyword hints.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeEntities",
            "type": "boolean",
            "required": false,
            "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "artifactMode",
            "type": "string",
            "required": false,
            "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery.",
            "constraints": {
              "enum": [
                "auto",
                "inline",
                "artifact"
              ],
              "default": "auto"
            }
          },
          {
            "name": "maxBytes",
            "type": "integer",
            "required": false,
            "description": "For URL sources, maximum response body bytes to read before extraction is truncated.",
            "constraints": {
              "default": 32768,
              "minimum": 1024,
              "maximum": 65536
            }
          },
          {
            "name": "maxLinks",
            "type": "integer",
            "required": false,
            "description": "For URL sources, maximum links to return when includeLinks is true.",
            "constraints": {
              "default": 20,
              "minimum": 0,
              "maximum": 50
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "For URL sources, fetch timeout in milliseconds.",
            "constraints": {
              "default": 5000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "source": "https://example.com",
          "sourceType": "url",
          "chunkSizeChars": 900,
          "chunkOverlapChars": 100,
          "maxChunks": 12,
          "outputFormat": "jsonl",
          "includeLinks": true,
          "includeKeywords": true,
          "artifactMode": "auto"
        }
      },
      "exampleRequest": {
        "source": "https://example.com",
        "sourceType": "url",
        "chunkSizeChars": 900,
        "chunkOverlapChars": 100,
        "maxChunks": 12,
        "outputFormat": "jsonl",
        "includeLinks": true,
        "includeKeywords": true,
        "artifactMode": "auto"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "document",
          "chunks",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "document": {
            "type": "object",
            "additionalProperties": true
          },
          "chunks": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "entities": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "output": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "rag-prep",
          "name": "RAG Prep",
          "department": "Documents & Content"
        },
        "requested": {
          "sourceType": "url",
          "chunkSizeChars": 900,
          "chunkOverlapChars": 100,
          "maxChunks": 12,
          "outputFormat": "jsonl",
          "includeLinks": true,
          "includeKeywords": true
        },
        "source": {
          "type": "url",
          "url": "https://example.com",
          "finalUrl": "https://example.com/",
          "upstreamDetailsDisclosed": false
        },
        "fetched": {
          "status": 200,
          "ok": true,
          "contentType": "text/html; charset=utf-8",
          "bytesRead": 1256,
          "truncated": false
        },
        "metadata": {
          "title": "Example Domain",
          "description": "Example page for documentation.",
          "canonical": "https://example.com/"
        },
        "document": {
          "id": "doc_5b6a1f2e3d4c9a80",
          "hash": "5b6a1f2e3d4c9a80...",
          "sourceType": "url",
          "characters": 65,
          "words": 10,
          "estimatedTokens": 17,
          "chunkCount": 1
        },
        "chunks": [
          {
            "id": "5b6a1f2e3d4c-001",
            "index": 0,
            "hash": "2fb5c1d42a01e771",
            "text": "Example Domain\n\nThis domain is for use in illustrative examples.",
            "characters": 65,
            "words": 10,
            "estimatedTokens": 17,
            "overlapFromPreviousChars": 0
          }
        ],
        "keywords": [
          {
            "keyword": "domain",
            "count": 2
          }
        ],
        "output": {
          "format": "jsonl",
          "bytes": 180,
          "artifact": {
            "url": "https://agentbodega.store/a/signed-token",
            "method": "GET"
          }
        },
        "limits": {
          "maxSourceTextChars": 49152,
          "maxChunks": 100,
          "maxChunkSizeChars": 3000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "source": "https://example.com",
                "sourceType": "url",
                "chunkSizeChars": 900,
                "chunkOverlapChars": 100,
                "maxChunks": 12,
                "outputFormat": "jsonl",
                "includeLinks": true,
                "includeKeywords": true,
                "artifactMode": "auto"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "rag-prep",
                  "name": "RAG Prep",
                  "department": "Documents & Content"
                },
                "requested": {
                  "sourceType": "url",
                  "chunkSizeChars": 900,
                  "chunkOverlapChars": 100,
                  "maxChunks": 12,
                  "outputFormat": "jsonl",
                  "includeLinks": true,
                  "includeKeywords": true
                },
                "source": {
                  "type": "url",
                  "url": "https://example.com",
                  "finalUrl": "https://example.com/",
                  "upstreamDetailsDisclosed": false
                },
                "fetched": {
                  "status": 200,
                  "ok": true,
                  "contentType": "text/html; charset=utf-8",
                  "bytesRead": 1256,
                  "truncated": false
                },
                "metadata": {
                  "title": "Example Domain",
                  "description": "Example page for documentation.",
                  "canonical": "https://example.com/"
                },
                "document": {
                  "id": "doc_5b6a1f2e3d4c9a80",
                  "hash": "5b6a1f2e3d4c9a80...",
                  "sourceType": "url",
                  "characters": 65,
                  "words": 10,
                  "estimatedTokens": 17,
                  "chunkCount": 1
                },
                "chunks": [
                  {
                    "id": "5b6a1f2e3d4c-001",
                    "index": 0,
                    "hash": "2fb5c1d42a01e771",
                    "text": "Example Domain\n\nThis domain is for use in illustrative examples.",
                    "characters": 65,
                    "words": 10,
                    "estimatedTokens": 17,
                    "overlapFromPreviousChars": 0
                  }
                ],
                "keywords": [
                  {
                    "keyword": "domain",
                    "count": 2
                  }
                ],
                "output": {
                  "format": "jsonl",
                  "bytes": 180,
                  "artifact": {
                    "url": "https://agentbodega.store/a/signed-token",
                    "method": "GET"
                  }
                },
                "limits": {
                  "maxSourceTextChars": 49152,
                  "maxChunks": 100,
                  "maxChunkSizeChars": 3000
                }
              }
            }
          },
          "routeTemplate": "/api/documents/rag-prep",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "source"
                    ],
                    "properties": {
                      "source": {
                        "type": "string",
                        "maxLength": 49152,
                        "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text."
                      },
                      "sourceType": {
                        "type": "string",
                        "enum": [
                          "auto",
                          "url",
                          "text"
                        ],
                        "default": "auto",
                        "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text."
                      },
                      "chunkSizeChars": {
                        "type": "integer",
                        "minimum": 200,
                        "maximum": 3000,
                        "default": 1200,
                        "description": "Target maximum character count per chunk before overlap is applied."
                      },
                      "chunkOverlapChars": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 1000,
                        "default": 120,
                        "description": "Characters copied from the end of the previous chunk into the next chunk."
                      },
                      "maxChunks": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100,
                        "default": 50,
                        "description": "Maximum number of chunks returned."
                      },
                      "outputFormat": {
                        "type": "string",
                        "enum": [
                          "json",
                          "jsonl",
                          "markdown"
                        ],
                        "default": "json",
                        "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact."
                      },
                      "includeMarkdown": {
                        "type": "boolean",
                        "default": true,
                        "description": "For URL sources, include the extracted markdown when it fits the response caps."
                      },
                      "includeLinks": {
                        "type": "boolean",
                        "default": true,
                        "description": "For URL sources, include normalized links visible in the source content."
                      },
                      "includeKeywords": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include lightweight frequency-based keyword hints."
                      },
                      "includeEntities": {
                        "type": "boolean",
                        "default": false,
                        "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference."
                      },
                      "artifactMode": {
                        "type": "string",
                        "enum": [
                          "auto",
                          "inline",
                          "artifact"
                        ],
                        "default": "auto",
                        "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery."
                      },
                      "maxBytes": {
                        "type": "integer",
                        "minimum": 1024,
                        "maximum": 65536,
                        "default": 32768,
                        "description": "For URL sources, maximum response body bytes to read before extraction is truncated."
                      },
                      "maxLinks": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 50,
                        "default": 20,
                        "description": "For URL sources, maximum links to return when includeLinks is true."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 5000,
                        "description": "For URL sources, fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "document",
                      "chunks",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "document": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "chunks": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "keywords": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "entities": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "output": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "rag-prep",
            "url": "https://agentbodega.store/api/documents/rag-prep",
            "method": "POST",
            "description": "Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.",
            "longDescription": "Purpose: Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nBest use: Use this when an agent needs prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: source.\nOptional fields: sourceType, chunkSizeChars, chunkOverlapChars, maxChunks, outputFormat, includeMarkdown, includeLinks, includeKeywords, includeEntities, artifactMode, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- source (required, string): Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text. Constraints: max length: 49152.\n- sourceType (optional, string): How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text. Constraints: accepted values: \"auto\", \"url\", \"text\"; default: \"auto\".\n- chunkSizeChars (optional, integer): Target maximum character count per chunk before overlap is applied. Constraints: default: 1200; min: 200; max: 3000.\n- chunkOverlapChars (optional, integer): Characters copied from the end of the previous chunk into the next chunk. Constraints: default: 120; min: 0; max: 1000.\n- maxChunks (optional, integer): Maximum number of chunks returned. Constraints: default: 50; min: 1; max: 100.\n- outputFormat (optional, string): Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact. Constraints: accepted values: \"json\", \"jsonl\", \"markdown\"; default: \"json\".\n- includeMarkdown (optional, boolean): For URL sources, include the extracted markdown when it fits the response caps. Constraints: default: true.\n- includeLinks (optional, boolean): For URL sources, include normalized links visible in the source content. Constraints: default: true.\n- includeKeywords (optional, boolean): Include lightweight frequency-based keyword hints. Constraints: default: true.\n- includeEntities (optional, boolean): Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference. Constraints: default: false.\n- artifactMode (optional, string): For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery. Constraints: accepted values: \"auto\", \"inline\", \"artifact\"; default: \"auto\".\n- maxBytes (optional, integer): For URL sources, maximum response body bytes to read before extraction is truncated. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): For URL sources, maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): For URL sources, fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"source\": \"https://example.com\",\n  \"sourceType\": \"url\",\n  \"chunkSizeChars\": 900,\n  \"chunkOverlapChars\": 100,\n  \"maxChunks\": 12,\n  \"outputFormat\": \"jsonl\",\n  \"includeLinks\": true,\n  \"includeKeywords\": true,\n  \"artifactMode\": \"auto\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "RAG Prep",
            "category": "documents-content",
            "kind": "rag-prep-tool",
            "tags": [
              "documents-content",
              "rag-prep",
              "chunking",
              "jsonl",
              "markdown",
              "clean-text",
              "keywords",
              "retrieval",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "source"
              ],
              "optional": [
                "sourceType",
                "chunkSizeChars",
                "chunkOverlapChars",
                "maxChunks",
                "outputFormat",
                "includeMarkdown",
                "includeLinks",
                "includeKeywords",
                "includeEntities",
                "artifactMode",
                "maxBytes",
                "maxLinks",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "source",
                  "type": "string",
                  "required": true,
                  "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text.",
                  "constraints": {
                    "maxLength": 49152
                  }
                },
                {
                  "name": "sourceType",
                  "type": "string",
                  "required": false,
                  "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text.",
                  "constraints": {
                    "enum": [
                      "auto",
                      "url",
                      "text"
                    ],
                    "default": "auto"
                  }
                },
                {
                  "name": "chunkSizeChars",
                  "type": "integer",
                  "required": false,
                  "description": "Target maximum character count per chunk before overlap is applied.",
                  "constraints": {
                    "default": 1200,
                    "minimum": 200,
                    "maximum": 3000
                  }
                },
                {
                  "name": "chunkOverlapChars",
                  "type": "integer",
                  "required": false,
                  "description": "Characters copied from the end of the previous chunk into the next chunk.",
                  "constraints": {
                    "default": 120,
                    "minimum": 0,
                    "maximum": 1000
                  }
                },
                {
                  "name": "maxChunks",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum number of chunks returned.",
                  "constraints": {
                    "default": 50,
                    "minimum": 1,
                    "maximum": 100
                  }
                },
                {
                  "name": "outputFormat",
                  "type": "string",
                  "required": false,
                  "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact.",
                  "constraints": {
                    "enum": [
                      "json",
                      "jsonl",
                      "markdown"
                    ],
                    "default": "json"
                  }
                },
                {
                  "name": "includeMarkdown",
                  "type": "boolean",
                  "required": false,
                  "description": "For URL sources, include the extracted markdown when it fits the response caps.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeLinks",
                  "type": "boolean",
                  "required": false,
                  "description": "For URL sources, include normalized links visible in the source content.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeKeywords",
                  "type": "boolean",
                  "required": false,
                  "description": "Include lightweight frequency-based keyword hints.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeEntities",
                  "type": "boolean",
                  "required": false,
                  "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "artifactMode",
                  "type": "string",
                  "required": false,
                  "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery.",
                  "constraints": {
                    "enum": [
                      "auto",
                      "inline",
                      "artifact"
                    ],
                    "default": "auto"
                  }
                },
                {
                  "name": "maxBytes",
                  "type": "integer",
                  "required": false,
                  "description": "For URL sources, maximum response body bytes to read before extraction is truncated.",
                  "constraints": {
                    "default": 32768,
                    "minimum": 1024,
                    "maximum": 65536
                  }
                },
                {
                  "name": "maxLinks",
                  "type": "integer",
                  "required": false,
                  "description": "For URL sources, maximum links to return when includeLinks is true.",
                  "constraints": {
                    "default": 20,
                    "minimum": 0,
                    "maximum": 50
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "For URL sources, fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 5000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "source": "https://example.com",
                "sourceType": "url",
                "chunkSizeChars": 900,
                "chunkOverlapChars": 100,
                "maxChunks": 12,
                "outputFormat": "jsonl",
                "includeLinks": true,
                "includeKeywords": true,
                "artifactMode": "auto"
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "source"
              ],
              "properties": {
                "source": {
                  "type": "string",
                  "maxLength": 49152,
                  "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text."
                },
                "sourceType": {
                  "type": "string",
                  "enum": [
                    "auto",
                    "url",
                    "text"
                  ],
                  "default": "auto",
                  "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text."
                },
                "chunkSizeChars": {
                  "type": "integer",
                  "minimum": 200,
                  "maximum": 3000,
                  "default": 1200,
                  "description": "Target maximum character count per chunk before overlap is applied."
                },
                "chunkOverlapChars": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1000,
                  "default": 120,
                  "description": "Characters copied from the end of the previous chunk into the next chunk."
                },
                "maxChunks": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100,
                  "default": 50,
                  "description": "Maximum number of chunks returned."
                },
                "outputFormat": {
                  "type": "string",
                  "enum": [
                    "json",
                    "jsonl",
                    "markdown"
                  ],
                  "default": "json",
                  "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact."
                },
                "includeMarkdown": {
                  "type": "boolean",
                  "default": true,
                  "description": "For URL sources, include the extracted markdown when it fits the response caps."
                },
                "includeLinks": {
                  "type": "boolean",
                  "default": true,
                  "description": "For URL sources, include normalized links visible in the source content."
                },
                "includeKeywords": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include lightweight frequency-based keyword hints."
                },
                "includeEntities": {
                  "type": "boolean",
                  "default": false,
                  "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference."
                },
                "artifactMode": {
                  "type": "string",
                  "enum": [
                    "auto",
                    "inline",
                    "artifact"
                  ],
                  "default": "auto",
                  "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery."
                },
                "maxBytes": {
                  "type": "integer",
                  "minimum": 1024,
                  "maximum": 65536,
                  "default": 32768,
                  "description": "For URL sources, maximum response body bytes to read before extraction is truncated."
                },
                "maxLinks": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 50,
                  "default": 20,
                  "description": "For URL sources, maximum links to return when includeLinks is true."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 5000,
                  "description": "For URL sources, fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "document",
                "chunks",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "document": {
                  "type": "object",
                  "additionalProperties": true
                },
                "chunks": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "keywords": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "entities": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "output": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/documents/rag-prep",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/documents/rag-prep",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "documents-content",
        "kind": "rag-prep-tool",
        "taxonomy": {
          "departmentId": "documents-content",
          "department": "Documents & Content",
          "aisleId": "rag-prep",
          "aisle": "RAG Prep",
          "shelfId": "chunking",
          "shelf": "Chunking",
          "offeringId": "rag-prep",
          "offering": "RAG Prep",
          "pathIds": [
            "documents-content",
            "rag-prep",
            "chunking",
            "rag-prep"
          ],
          "pathLabels": [
            "Documents & Content",
            "RAG Prep",
            "Chunking",
            "RAG Prep"
          ],
          "taxonomyPath": "documents-content.rag-prep.chunking.rag-prep",
          "layout": {
            "department": {
              "id": "documents-content",
              "name": "Documents & Content"
            },
            "aisle": {
              "id": "rag-prep",
              "name": "RAG Prep"
            },
            "shelf": {
              "id": "chunking",
              "name": "Chunking"
            },
            "offering": {
              "id": "rag-prep",
              "name": "RAG Prep"
            },
            "pathIds": [
              "documents-content",
              "rag-prep",
              "chunking",
              "rag-prep"
            ],
            "pathLabels": [
              "Documents & Content",
              "RAG Prep",
              "Chunking",
              "RAG Prep"
            ]
          }
        },
        "description": {
          "short": "Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.",
          "full": "Purpose: Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nBest use: Use this when an agent needs prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: source.\nOptional fields: sourceType, chunkSizeChars, chunkOverlapChars, maxChunks, outputFormat, includeMarkdown, includeLinks, includeKeywords, includeEntities, artifactMode, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- source (required, string): Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text. Constraints: max length: 49152.\n- sourceType (optional, string): How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text. Constraints: accepted values: \"auto\", \"url\", \"text\"; default: \"auto\".\n- chunkSizeChars (optional, integer): Target maximum character count per chunk before overlap is applied. Constraints: default: 1200; min: 200; max: 3000.\n- chunkOverlapChars (optional, integer): Characters copied from the end of the previous chunk into the next chunk. Constraints: default: 120; min: 0; max: 1000.\n- maxChunks (optional, integer): Maximum number of chunks returned. Constraints: default: 50; min: 1; max: 100.\n- outputFormat (optional, string): Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact. Constraints: accepted values: \"json\", \"jsonl\", \"markdown\"; default: \"json\".\n- includeMarkdown (optional, boolean): For URL sources, include the extracted markdown when it fits the response caps. Constraints: default: true.\n- includeLinks (optional, boolean): For URL sources, include normalized links visible in the source content. Constraints: default: true.\n- includeKeywords (optional, boolean): Include lightweight frequency-based keyword hints. Constraints: default: true.\n- includeEntities (optional, boolean): Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference. Constraints: default: false.\n- artifactMode (optional, string): For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery. Constraints: accepted values: \"auto\", \"inline\", \"artifact\"; default: \"auto\".\n- maxBytes (optional, integer): For URL sources, maximum response body bytes to read before extraction is truncated. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): For URL sources, maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): For URL sources, fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"source\": \"https://example.com\",\n  \"sourceType\": \"url\",\n  \"chunkSizeChars\": 900,\n  \"chunkOverlapChars\": 100,\n  \"maxChunks\": 12,\n  \"outputFormat\": \"jsonl\",\n  \"includeLinks\": true,\n  \"includeKeywords\": true,\n  \"artifactMode\": \"auto\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "source"
          ],
          "properties": {
            "source": {
              "type": "string",
              "maxLength": 49152,
              "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text."
            },
            "sourceType": {
              "type": "string",
              "enum": [
                "auto",
                "url",
                "text"
              ],
              "default": "auto",
              "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text."
            },
            "chunkSizeChars": {
              "type": "integer",
              "minimum": 200,
              "maximum": 3000,
              "default": 1200,
              "description": "Target maximum character count per chunk before overlap is applied."
            },
            "chunkOverlapChars": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000,
              "default": 120,
              "description": "Characters copied from the end of the previous chunk into the next chunk."
            },
            "maxChunks": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50,
              "description": "Maximum number of chunks returned."
            },
            "outputFormat": {
              "type": "string",
              "enum": [
                "json",
                "jsonl",
                "markdown"
              ],
              "default": "json",
              "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "For URL sources, include the extracted markdown when it fits the response caps."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "For URL sources, include normalized links visible in the source content."
            },
            "includeKeywords": {
              "type": "boolean",
              "default": true,
              "description": "Include lightweight frequency-based keyword hints."
            },
            "includeEntities": {
              "type": "boolean",
              "default": false,
              "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference."
            },
            "artifactMode": {
              "type": "string",
              "enum": [
                "auto",
                "inline",
                "artifact"
              ],
              "default": "auto",
              "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "For URL sources, maximum response body bytes to read before extraction is truncated."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "For URL sources, maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "For URL sources, fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "source"
          ],
          "properties": {
            "source": {
              "type": "string",
              "maxLength": 49152,
              "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text."
            },
            "sourceType": {
              "type": "string",
              "enum": [
                "auto",
                "url",
                "text"
              ],
              "default": "auto",
              "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text."
            },
            "chunkSizeChars": {
              "type": "integer",
              "minimum": 200,
              "maximum": 3000,
              "default": 1200,
              "description": "Target maximum character count per chunk before overlap is applied."
            },
            "chunkOverlapChars": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000,
              "default": 120,
              "description": "Characters copied from the end of the previous chunk into the next chunk."
            },
            "maxChunks": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50,
              "description": "Maximum number of chunks returned."
            },
            "outputFormat": {
              "type": "string",
              "enum": [
                "json",
                "jsonl",
                "markdown"
              ],
              "default": "json",
              "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "For URL sources, include the extracted markdown when it fits the response caps."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "For URL sources, include normalized links visible in the source content."
            },
            "includeKeywords": {
              "type": "boolean",
              "default": true,
              "description": "Include lightweight frequency-based keyword hints."
            },
            "includeEntities": {
              "type": "boolean",
              "default": false,
              "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference."
            },
            "artifactMode": {
              "type": "string",
              "enum": [
                "auto",
                "inline",
                "artifact"
              ],
              "default": "auto",
              "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "For URL sources, maximum response body bytes to read before extraction is truncated."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "For URL sources, maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "For URL sources, fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "source"
          ],
          "optional": [
            "sourceType",
            "chunkSizeChars",
            "chunkOverlapChars",
            "maxChunks",
            "outputFormat",
            "includeMarkdown",
            "includeLinks",
            "includeKeywords",
            "includeEntities",
            "artifactMode",
            "maxBytes",
            "maxLinks",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "source",
              "type": "string",
              "required": true,
              "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text.",
              "constraints": {
                "maxLength": 49152
              }
            },
            {
              "name": "sourceType",
              "type": "string",
              "required": false,
              "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text.",
              "constraints": {
                "enum": [
                  "auto",
                  "url",
                  "text"
                ],
                "default": "auto"
              }
            },
            {
              "name": "chunkSizeChars",
              "type": "integer",
              "required": false,
              "description": "Target maximum character count per chunk before overlap is applied.",
              "constraints": {
                "default": 1200,
                "minimum": 200,
                "maximum": 3000
              }
            },
            {
              "name": "chunkOverlapChars",
              "type": "integer",
              "required": false,
              "description": "Characters copied from the end of the previous chunk into the next chunk.",
              "constraints": {
                "default": 120,
                "minimum": 0,
                "maximum": 1000
              }
            },
            {
              "name": "maxChunks",
              "type": "integer",
              "required": false,
              "description": "Maximum number of chunks returned.",
              "constraints": {
                "default": 50,
                "minimum": 1,
                "maximum": 100
              }
            },
            {
              "name": "outputFormat",
              "type": "string",
              "required": false,
              "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact.",
              "constraints": {
                "enum": [
                  "json",
                  "jsonl",
                  "markdown"
                ],
                "default": "json"
              }
            },
            {
              "name": "includeMarkdown",
              "type": "boolean",
              "required": false,
              "description": "For URL sources, include the extracted markdown when it fits the response caps.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeLinks",
              "type": "boolean",
              "required": false,
              "description": "For URL sources, include normalized links visible in the source content.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeKeywords",
              "type": "boolean",
              "required": false,
              "description": "Include lightweight frequency-based keyword hints.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeEntities",
              "type": "boolean",
              "required": false,
              "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "artifactMode",
              "type": "string",
              "required": false,
              "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery.",
              "constraints": {
                "enum": [
                  "auto",
                  "inline",
                  "artifact"
                ],
                "default": "auto"
              }
            },
            {
              "name": "maxBytes",
              "type": "integer",
              "required": false,
              "description": "For URL sources, maximum response body bytes to read before extraction is truncated.",
              "constraints": {
                "default": 32768,
                "minimum": 1024,
                "maximum": 65536
              }
            },
            {
              "name": "maxLinks",
              "type": "integer",
              "required": false,
              "description": "For URL sources, maximum links to return when includeLinks is true.",
              "constraints": {
                "default": 20,
                "minimum": 0,
                "maximum": 50
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "For URL sources, fetch timeout in milliseconds.",
              "constraints": {
                "default": 5000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "source": "https://example.com",
            "sourceType": "url",
            "chunkSizeChars": 900,
            "chunkOverlapChars": 100,
            "maxChunks": 12,
            "outputFormat": "jsonl",
            "includeLinks": true,
            "includeKeywords": true,
            "artifactMode": "auto"
          }
        },
        "exampleRequest": {
          "source": "https://example.com",
          "sourceType": "url",
          "chunkSizeChars": 900,
          "chunkOverlapChars": 100,
          "maxChunks": 12,
          "outputFormat": "jsonl",
          "includeLinks": true,
          "includeKeywords": true,
          "artifactMode": "auto"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "document",
            "chunks",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "document": {
              "type": "object",
              "additionalProperties": true
            },
            "chunks": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "keywords": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "entities": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "output": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "document",
            "chunks",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "document": {
              "type": "object",
              "additionalProperties": true
            },
            "chunks": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "keywords": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "entities": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "output": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "rag-prep",
            "name": "RAG Prep",
            "department": "Documents & Content"
          },
          "requested": {
            "sourceType": "url",
            "chunkSizeChars": 900,
            "chunkOverlapChars": 100,
            "maxChunks": 12,
            "outputFormat": "jsonl",
            "includeLinks": true,
            "includeKeywords": true
          },
          "source": {
            "type": "url",
            "url": "https://example.com",
            "finalUrl": "https://example.com/",
            "upstreamDetailsDisclosed": false
          },
          "fetched": {
            "status": 200,
            "ok": true,
            "contentType": "text/html; charset=utf-8",
            "bytesRead": 1256,
            "truncated": false
          },
          "metadata": {
            "title": "Example Domain",
            "description": "Example page for documentation.",
            "canonical": "https://example.com/"
          },
          "document": {
            "id": "doc_5b6a1f2e3d4c9a80",
            "hash": "5b6a1f2e3d4c9a80...",
            "sourceType": "url",
            "characters": 65,
            "words": 10,
            "estimatedTokens": 17,
            "chunkCount": 1
          },
          "chunks": [
            {
              "id": "5b6a1f2e3d4c-001",
              "index": 0,
              "hash": "2fb5c1d42a01e771",
              "text": "Example Domain\n\nThis domain is for use in illustrative examples.",
              "characters": 65,
              "words": 10,
              "estimatedTokens": 17,
              "overlapFromPreviousChars": 0
            }
          ],
          "keywords": [
            {
              "keyword": "domain",
              "count": 2
            }
          ],
          "output": {
            "format": "jsonl",
            "bytes": 180,
            "artifact": {
              "url": "https://agentbodega.store/a/signed-token",
              "method": "GET"
            }
          },
          "limits": {
            "maxSourceTextChars": 49152,
            "maxChunks": 100,
            "maxChunkSizeChars": 3000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/media/image/convert",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Image Format Converter",
      "description": "Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.",
      "longDescription": "Purpose: Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nBest use: Use this when an agent needs create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: imageUrl, targetFormat.\nOptional fields: width, height, fit, quality, background, filename, ttlSeconds.\n\nAccepted fields:\n- imageUrl (required, string): Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected. Constraints: format: uri.\n- targetFormat (required, string): Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend. Constraints: accepted values: \"jpg\", \"jpeg\", \"png\", \"webp\", \"avif\".\n- width (optional, integer): Optional output width in pixels. If omitted, the source width is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- height (optional, integer): Optional output height in pixels. If omitted, the source height is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- fit (optional, string): Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds. Constraints: accepted values: \"scale-down\", \"contain\", \"cover\", \"crop\", \"pad\"; default: \"scale-down\".\n- quality (optional, integer): Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded. Constraints: default: 85; min: 1; max: 95.\n- background (optional, string): Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff. Constraints: max length: 40.\n- filename (optional, string): Optional download filename. The service normalizes the extension to match targetFormat. Constraints: max length: 120.\n- ttlSeconds (optional, integer): How long the signed conversion download URL should remain usable, in seconds. Constraints: default: 3600; min: 60; max: 86400.\n\nExample request body:\n```json\n{\n  \"imageUrl\": \"https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg\",\n  \"targetFormat\": \"webp\",\n  \"width\": 800,\n  \"fit\": \"scale-down\",\n  \"quality\": 85,\n  \"ttlSeconds\": 3600\n}\n```",
      "category": "edge-ai-automation",
      "kind": "media-conversion-tool",
      "departmentId": "edge-ai-automation",
      "department": "Edge AI & Automation",
      "aisleId": "media-conversion",
      "aisle": "Media Conversion",
      "shelfId": "image-format",
      "shelf": "Image Format",
      "offeringId": "image-format-converter",
      "offering": "Image Format Converter",
      "pathIds": [
        "edge-ai-automation",
        "media-conversion",
        "image-format",
        "image-format-converter"
      ],
      "pathLabels": [
        "Edge AI & Automation",
        "Media Conversion",
        "Image Format",
        "Image Format Converter"
      ],
      "taxonomyPath": "edge-ai-automation.media-conversion.image-format.image-format-converter",
      "layout": {
        "department": {
          "id": "edge-ai-automation",
          "name": "Edge AI & Automation"
        },
        "aisle": {
          "id": "media-conversion",
          "name": "Media Conversion"
        },
        "shelf": {
          "id": "image-format",
          "name": "Image Format"
        },
        "offering": {
          "id": "image-format-converter",
          "name": "Image Format Converter"
        },
        "pathIds": [
          "edge-ai-automation",
          "media-conversion",
          "image-format",
          "image-format-converter"
        ],
        "pathLabels": [
          "Edge AI & Automation",
          "Media Conversion",
          "Image Format",
          "Image Format Converter"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "edge-ai-automation",
        "media",
        "image",
        "image-conversion",
        "heic",
        "jpg",
        "jpeg",
        "png",
        "webp",
        "avif",
        "agent-tools",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "imageUrl",
          "targetFormat"
        ],
        "properties": {
          "imageUrl": {
            "type": "string",
            "format": "uri",
            "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected."
          },
          "targetFormat": {
            "type": "string",
            "enum": [
              "jpg",
              "jpeg",
              "png",
              "webp",
              "avif"
            ],
            "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend."
          },
          "width": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4096,
            "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it."
          },
          "height": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4096,
            "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it."
          },
          "fit": {
            "type": "string",
            "enum": [
              "scale-down",
              "contain",
              "cover",
              "crop",
              "pad"
            ],
            "default": "scale-down",
            "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds."
          },
          "quality": {
            "type": "integer",
            "minimum": 1,
            "maximum": 95,
            "default": 85,
            "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded."
          },
          "background": {
            "type": "string",
            "maxLength": 40,
            "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff."
          },
          "filename": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional download filename. The service normalizes the extension to match targetFormat."
          },
          "ttlSeconds": {
            "type": "integer",
            "minimum": 60,
            "maximum": 86400,
            "default": 3600,
            "description": "How long the signed conversion download URL should remain usable, in seconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "imageUrl",
          "targetFormat"
        ],
        "optional": [
          "width",
          "height",
          "fit",
          "quality",
          "background",
          "filename",
          "ttlSeconds"
        ],
        "fields": [
          {
            "name": "imageUrl",
            "type": "string",
            "required": true,
            "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "targetFormat",
            "type": "string",
            "required": true,
            "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend.",
            "constraints": {
              "enum": [
                "jpg",
                "jpeg",
                "png",
                "webp",
                "avif"
              ]
            }
          },
          {
            "name": "width",
            "type": "integer",
            "required": false,
            "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it.",
            "constraints": {
              "minimum": 1,
              "maximum": 4096
            }
          },
          {
            "name": "height",
            "type": "integer",
            "required": false,
            "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it.",
            "constraints": {
              "minimum": 1,
              "maximum": 4096
            }
          },
          {
            "name": "fit",
            "type": "string",
            "required": false,
            "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds.",
            "constraints": {
              "enum": [
                "scale-down",
                "contain",
                "cover",
                "crop",
                "pad"
              ],
              "default": "scale-down"
            }
          },
          {
            "name": "quality",
            "type": "integer",
            "required": false,
            "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded.",
            "constraints": {
              "default": 85,
              "minimum": 1,
              "maximum": 95
            }
          },
          {
            "name": "background",
            "type": "string",
            "required": false,
            "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff.",
            "constraints": {
              "maxLength": 40
            }
          },
          {
            "name": "filename",
            "type": "string",
            "required": false,
            "description": "Optional download filename. The service normalizes the extension to match targetFormat.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "ttlSeconds",
            "type": "integer",
            "required": false,
            "description": "How long the signed conversion download URL should remain usable, in seconds.",
            "constraints": {
              "default": 3600,
              "minimum": 60,
              "maximum": 86400
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
          "targetFormat": "webp",
          "width": 800,
          "fit": "scale-down",
          "quality": 85,
          "ttlSeconds": 3600
        }
      },
      "exampleRequest": {
        "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
        "targetFormat": "webp",
        "width": 800,
        "fit": "scale-down",
        "quality": 85,
        "ttlSeconds": 3600
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "conversion",
          "download",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "conversion": {
            "type": "object",
            "additionalProperties": true
          },
          "download": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "image-format-converter",
          "name": "Image Format Converter",
          "department": "Edge AI & Automation"
        },
        "requested": {
          "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
          "targetFormat": "webp",
          "width": 800,
          "fit": "scale-down",
          "quality": 85,
          "ttlSeconds": 3600
        },
        "source": {
          "contentType": "image/jpeg",
          "contentLength": 36287,
          "extension": "jpg",
          "validated": true,
          "redirectsAllowed": false
        },
        "conversion": {
          "targetFormat": "webp",
          "contentType": "image/webp",
          "filename": "JPEG_example_flower.webp"
        },
        "download": {
          "url": "https://agentbodega.store/i/signed-token",
          "method": "GET",
          "expiresAt": "2026-07-07T18:00:00.000Z"
        },
        "limits": {
          "maxSourceBytes": 10485760,
          "maxDimension": 4096,
          "maxQuality": 95,
          "maxTtlSeconds": 86400
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
                "targetFormat": "webp",
                "width": 800,
                "fit": "scale-down",
                "quality": 85,
                "ttlSeconds": 3600
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "image-format-converter",
                  "name": "Image Format Converter",
                  "department": "Edge AI & Automation"
                },
                "requested": {
                  "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
                  "targetFormat": "webp",
                  "width": 800,
                  "fit": "scale-down",
                  "quality": 85,
                  "ttlSeconds": 3600
                },
                "source": {
                  "contentType": "image/jpeg",
                  "contentLength": 36287,
                  "extension": "jpg",
                  "validated": true,
                  "redirectsAllowed": false
                },
                "conversion": {
                  "targetFormat": "webp",
                  "contentType": "image/webp",
                  "filename": "JPEG_example_flower.webp"
                },
                "download": {
                  "url": "https://agentbodega.store/i/signed-token",
                  "method": "GET",
                  "expiresAt": "2026-07-07T18:00:00.000Z"
                },
                "limits": {
                  "maxSourceBytes": 10485760,
                  "maxDimension": 4096,
                  "maxQuality": 95,
                  "maxTtlSeconds": 86400
                }
              }
            }
          },
          "routeTemplate": "/api/media/image/convert",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "imageUrl",
                      "targetFormat"
                    ],
                    "properties": {
                      "imageUrl": {
                        "type": "string",
                        "format": "uri",
                        "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected."
                      },
                      "targetFormat": {
                        "type": "string",
                        "enum": [
                          "jpg",
                          "jpeg",
                          "png",
                          "webp",
                          "avif"
                        ],
                        "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend."
                      },
                      "width": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 4096,
                        "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it."
                      },
                      "height": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 4096,
                        "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it."
                      },
                      "fit": {
                        "type": "string",
                        "enum": [
                          "scale-down",
                          "contain",
                          "cover",
                          "crop",
                          "pad"
                        ],
                        "default": "scale-down",
                        "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds."
                      },
                      "quality": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 95,
                        "default": 85,
                        "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded."
                      },
                      "background": {
                        "type": "string",
                        "maxLength": 40,
                        "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff."
                      },
                      "filename": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional download filename. The service normalizes the extension to match targetFormat."
                      },
                      "ttlSeconds": {
                        "type": "integer",
                        "minimum": 60,
                        "maximum": 86400,
                        "default": 3600,
                        "description": "How long the signed conversion download URL should remain usable, in seconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "conversion",
                      "download",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "conversion": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "download": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "image-format-converter",
            "url": "https://agentbodega.store/api/media/image/convert",
            "method": "POST",
            "description": "Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.",
            "longDescription": "Purpose: Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nBest use: Use this when an agent needs create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: imageUrl, targetFormat.\nOptional fields: width, height, fit, quality, background, filename, ttlSeconds.\n\nAccepted fields:\n- imageUrl (required, string): Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected. Constraints: format: uri.\n- targetFormat (required, string): Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend. Constraints: accepted values: \"jpg\", \"jpeg\", \"png\", \"webp\", \"avif\".\n- width (optional, integer): Optional output width in pixels. If omitted, the source width is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- height (optional, integer): Optional output height in pixels. If omitted, the source height is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- fit (optional, string): Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds. Constraints: accepted values: \"scale-down\", \"contain\", \"cover\", \"crop\", \"pad\"; default: \"scale-down\".\n- quality (optional, integer): Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded. Constraints: default: 85; min: 1; max: 95.\n- background (optional, string): Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff. Constraints: max length: 40.\n- filename (optional, string): Optional download filename. The service normalizes the extension to match targetFormat. Constraints: max length: 120.\n- ttlSeconds (optional, integer): How long the signed conversion download URL should remain usable, in seconds. Constraints: default: 3600; min: 60; max: 86400.\n\nExample request body:\n```json\n{\n  \"imageUrl\": \"https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg\",\n  \"targetFormat\": \"webp\",\n  \"width\": 800,\n  \"fit\": \"scale-down\",\n  \"quality\": 85,\n  \"ttlSeconds\": 3600\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Image Format Converter",
            "category": "edge-ai-automation",
            "kind": "media-conversion-tool",
            "tags": [
              "edge-ai-automation",
              "media",
              "image",
              "image-conversion",
              "heic",
              "jpg",
              "jpeg",
              "png",
              "webp",
              "avif",
              "agent-tools",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "imageUrl",
                "targetFormat"
              ],
              "optional": [
                "width",
                "height",
                "fit",
                "quality",
                "background",
                "filename",
                "ttlSeconds"
              ],
              "fields": [
                {
                  "name": "imageUrl",
                  "type": "string",
                  "required": true,
                  "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "targetFormat",
                  "type": "string",
                  "required": true,
                  "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend.",
                  "constraints": {
                    "enum": [
                      "jpg",
                      "jpeg",
                      "png",
                      "webp",
                      "avif"
                    ]
                  }
                },
                {
                  "name": "width",
                  "type": "integer",
                  "required": false,
                  "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it.",
                  "constraints": {
                    "minimum": 1,
                    "maximum": 4096
                  }
                },
                {
                  "name": "height",
                  "type": "integer",
                  "required": false,
                  "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it.",
                  "constraints": {
                    "minimum": 1,
                    "maximum": 4096
                  }
                },
                {
                  "name": "fit",
                  "type": "string",
                  "required": false,
                  "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds.",
                  "constraints": {
                    "enum": [
                      "scale-down",
                      "contain",
                      "cover",
                      "crop",
                      "pad"
                    ],
                    "default": "scale-down"
                  }
                },
                {
                  "name": "quality",
                  "type": "integer",
                  "required": false,
                  "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded.",
                  "constraints": {
                    "default": 85,
                    "minimum": 1,
                    "maximum": 95
                  }
                },
                {
                  "name": "background",
                  "type": "string",
                  "required": false,
                  "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff.",
                  "constraints": {
                    "maxLength": 40
                  }
                },
                {
                  "name": "filename",
                  "type": "string",
                  "required": false,
                  "description": "Optional download filename. The service normalizes the extension to match targetFormat.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "ttlSeconds",
                  "type": "integer",
                  "required": false,
                  "description": "How long the signed conversion download URL should remain usable, in seconds.",
                  "constraints": {
                    "default": 3600,
                    "minimum": 60,
                    "maximum": 86400
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
                "targetFormat": "webp",
                "width": 800,
                "fit": "scale-down",
                "quality": 85,
                "ttlSeconds": 3600
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "imageUrl",
                "targetFormat"
              ],
              "properties": {
                "imageUrl": {
                  "type": "string",
                  "format": "uri",
                  "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected."
                },
                "targetFormat": {
                  "type": "string",
                  "enum": [
                    "jpg",
                    "jpeg",
                    "png",
                    "webp",
                    "avif"
                  ],
                  "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend."
                },
                "width": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 4096,
                  "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it."
                },
                "height": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 4096,
                  "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it."
                },
                "fit": {
                  "type": "string",
                  "enum": [
                    "scale-down",
                    "contain",
                    "cover",
                    "crop",
                    "pad"
                  ],
                  "default": "scale-down",
                  "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds."
                },
                "quality": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 95,
                  "default": 85,
                  "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded."
                },
                "background": {
                  "type": "string",
                  "maxLength": 40,
                  "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff."
                },
                "filename": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional download filename. The service normalizes the extension to match targetFormat."
                },
                "ttlSeconds": {
                  "type": "integer",
                  "minimum": 60,
                  "maximum": 86400,
                  "default": 3600,
                  "description": "How long the signed conversion download URL should remain usable, in seconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "conversion",
                "download",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "conversion": {
                  "type": "object",
                  "additionalProperties": true
                },
                "download": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/media/image/convert",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/media/image/convert",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "edge-ai-automation",
        "kind": "media-conversion-tool",
        "taxonomy": {
          "departmentId": "edge-ai-automation",
          "department": "Edge AI & Automation",
          "aisleId": "media-conversion",
          "aisle": "Media Conversion",
          "shelfId": "image-format",
          "shelf": "Image Format",
          "offeringId": "image-format-converter",
          "offering": "Image Format Converter",
          "pathIds": [
            "edge-ai-automation",
            "media-conversion",
            "image-format",
            "image-format-converter"
          ],
          "pathLabels": [
            "Edge AI & Automation",
            "Media Conversion",
            "Image Format",
            "Image Format Converter"
          ],
          "taxonomyPath": "edge-ai-automation.media-conversion.image-format.image-format-converter",
          "layout": {
            "department": {
              "id": "edge-ai-automation",
              "name": "Edge AI & Automation"
            },
            "aisle": {
              "id": "media-conversion",
              "name": "Media Conversion"
            },
            "shelf": {
              "id": "image-format",
              "name": "Image Format"
            },
            "offering": {
              "id": "image-format-converter",
              "name": "Image Format Converter"
            },
            "pathIds": [
              "edge-ai-automation",
              "media-conversion",
              "image-format",
              "image-format-converter"
            ],
            "pathLabels": [
              "Edge AI & Automation",
              "Media Conversion",
              "Image Format",
              "Image Format Converter"
            ]
          }
        },
        "description": {
          "short": "Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.",
          "full": "Purpose: Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nBest use: Use this when an agent needs create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: imageUrl, targetFormat.\nOptional fields: width, height, fit, quality, background, filename, ttlSeconds.\n\nAccepted fields:\n- imageUrl (required, string): Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected. Constraints: format: uri.\n- targetFormat (required, string): Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend. Constraints: accepted values: \"jpg\", \"jpeg\", \"png\", \"webp\", \"avif\".\n- width (optional, integer): Optional output width in pixels. If omitted, the source width is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- height (optional, integer): Optional output height in pixels. If omitted, the source height is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- fit (optional, string): Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds. Constraints: accepted values: \"scale-down\", \"contain\", \"cover\", \"crop\", \"pad\"; default: \"scale-down\".\n- quality (optional, integer): Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded. Constraints: default: 85; min: 1; max: 95.\n- background (optional, string): Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff. Constraints: max length: 40.\n- filename (optional, string): Optional download filename. The service normalizes the extension to match targetFormat. Constraints: max length: 120.\n- ttlSeconds (optional, integer): How long the signed conversion download URL should remain usable, in seconds. Constraints: default: 3600; min: 60; max: 86400.\n\nExample request body:\n```json\n{\n  \"imageUrl\": \"https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg\",\n  \"targetFormat\": \"webp\",\n  \"width\": 800,\n  \"fit\": \"scale-down\",\n  \"quality\": 85,\n  \"ttlSeconds\": 3600\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "imageUrl",
            "targetFormat"
          ],
          "properties": {
            "imageUrl": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected."
            },
            "targetFormat": {
              "type": "string",
              "enum": [
                "jpg",
                "jpeg",
                "png",
                "webp",
                "avif"
              ],
              "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend."
            },
            "width": {
              "type": "integer",
              "minimum": 1,
              "maximum": 4096,
              "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it."
            },
            "height": {
              "type": "integer",
              "minimum": 1,
              "maximum": 4096,
              "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it."
            },
            "fit": {
              "type": "string",
              "enum": [
                "scale-down",
                "contain",
                "cover",
                "crop",
                "pad"
              ],
              "default": "scale-down",
              "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds."
            },
            "quality": {
              "type": "integer",
              "minimum": 1,
              "maximum": 95,
              "default": 85,
              "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded."
            },
            "background": {
              "type": "string",
              "maxLength": 40,
              "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff."
            },
            "filename": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional download filename. The service normalizes the extension to match targetFormat."
            },
            "ttlSeconds": {
              "type": "integer",
              "minimum": 60,
              "maximum": 86400,
              "default": 3600,
              "description": "How long the signed conversion download URL should remain usable, in seconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "imageUrl",
            "targetFormat"
          ],
          "properties": {
            "imageUrl": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected."
            },
            "targetFormat": {
              "type": "string",
              "enum": [
                "jpg",
                "jpeg",
                "png",
                "webp",
                "avif"
              ],
              "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend."
            },
            "width": {
              "type": "integer",
              "minimum": 1,
              "maximum": 4096,
              "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it."
            },
            "height": {
              "type": "integer",
              "minimum": 1,
              "maximum": 4096,
              "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it."
            },
            "fit": {
              "type": "string",
              "enum": [
                "scale-down",
                "contain",
                "cover",
                "crop",
                "pad"
              ],
              "default": "scale-down",
              "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds."
            },
            "quality": {
              "type": "integer",
              "minimum": 1,
              "maximum": 95,
              "default": 85,
              "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded."
            },
            "background": {
              "type": "string",
              "maxLength": 40,
              "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff."
            },
            "filename": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional download filename. The service normalizes the extension to match targetFormat."
            },
            "ttlSeconds": {
              "type": "integer",
              "minimum": 60,
              "maximum": 86400,
              "default": 3600,
              "description": "How long the signed conversion download URL should remain usable, in seconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "imageUrl",
            "targetFormat"
          ],
          "optional": [
            "width",
            "height",
            "fit",
            "quality",
            "background",
            "filename",
            "ttlSeconds"
          ],
          "fields": [
            {
              "name": "imageUrl",
              "type": "string",
              "required": true,
              "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "targetFormat",
              "type": "string",
              "required": true,
              "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend.",
              "constraints": {
                "enum": [
                  "jpg",
                  "jpeg",
                  "png",
                  "webp",
                  "avif"
                ]
              }
            },
            {
              "name": "width",
              "type": "integer",
              "required": false,
              "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it.",
              "constraints": {
                "minimum": 1,
                "maximum": 4096
              }
            },
            {
              "name": "height",
              "type": "integer",
              "required": false,
              "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it.",
              "constraints": {
                "minimum": 1,
                "maximum": 4096
              }
            },
            {
              "name": "fit",
              "type": "string",
              "required": false,
              "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds.",
              "constraints": {
                "enum": [
                  "scale-down",
                  "contain",
                  "cover",
                  "crop",
                  "pad"
                ],
                "default": "scale-down"
              }
            },
            {
              "name": "quality",
              "type": "integer",
              "required": false,
              "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded.",
              "constraints": {
                "default": 85,
                "minimum": 1,
                "maximum": 95
              }
            },
            {
              "name": "background",
              "type": "string",
              "required": false,
              "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff.",
              "constraints": {
                "maxLength": 40
              }
            },
            {
              "name": "filename",
              "type": "string",
              "required": false,
              "description": "Optional download filename. The service normalizes the extension to match targetFormat.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "ttlSeconds",
              "type": "integer",
              "required": false,
              "description": "How long the signed conversion download URL should remain usable, in seconds.",
              "constraints": {
                "default": 3600,
                "minimum": 60,
                "maximum": 86400
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
            "targetFormat": "webp",
            "width": 800,
            "fit": "scale-down",
            "quality": 85,
            "ttlSeconds": 3600
          }
        },
        "exampleRequest": {
          "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
          "targetFormat": "webp",
          "width": 800,
          "fit": "scale-down",
          "quality": 85,
          "ttlSeconds": 3600
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "conversion",
            "download",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "conversion": {
              "type": "object",
              "additionalProperties": true
            },
            "download": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "conversion",
            "download",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "conversion": {
              "type": "object",
              "additionalProperties": true
            },
            "download": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "image-format-converter",
            "name": "Image Format Converter",
            "department": "Edge AI & Automation"
          },
          "requested": {
            "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
            "targetFormat": "webp",
            "width": 800,
            "fit": "scale-down",
            "quality": 85,
            "ttlSeconds": 3600
          },
          "source": {
            "contentType": "image/jpeg",
            "contentLength": 36287,
            "extension": "jpg",
            "validated": true,
            "redirectsAllowed": false
          },
          "conversion": {
            "targetFormat": "webp",
            "contentType": "image/webp",
            "filename": "JPEG_example_flower.webp"
          },
          "download": {
            "url": "https://agentbodega.store/i/signed-token",
            "method": "GET",
            "expiresAt": "2026-07-07T18:00:00.000Z"
          },
          "limits": {
            "maxSourceBytes": 10485760,
            "maxDimension": 4096,
            "maxQuality": 95,
            "maxTtlSeconds": 86400
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/real-estate/listings/search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Real Estate Listing Search",
      "description": "Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.",
      "longDescription": "Purpose: Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nBest use: Use this when an agent needs search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.\nOptional fields: source, mode, market, listingType, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, homeTypes, propertyType, bedrooms, sortBy, daysOnMarket, sqftMin, sqftMax, lotSizeMin, lotSizeMax, yearBuiltMin, yearBuiltMax, amenities, searchUrls, addresses, zpids, propertyIds, locationSlug, state, zipCode, maxRent, petFriendly, maxPages, filterToRequestedCity, includeSchools, includeHistory, includeDetails, smartScrape, maxResults.\n\nAccepted fields:\n- source (optional, string): Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments. Constraints: accepted values: \"auto\", \"zillow\", \"apartments\", \"realtor\"; default: \"auto\".\n- mode (optional, string): Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids. Constraints: accepted values: \"search\", \"url\", \"lookup\"; default: \"search\".\n- market (optional, string): City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required.\n- listingType (optional, string): Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages. Constraints: accepted values: \"for_sale\", \"recently_sold\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- priceMin (optional, integer): Minimum listing price or monthly rent in USD. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- homeTypes (optional, array): Allowed home types. Returned rows without a verifiable matching normalized home type are excluded. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used by the Apartments-backed provider. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used by the Apartments-backed provider.\n- sortBy (optional, string): Managed-source collection order before AgentBodega normalizes and rechecks the requested filters. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- sqftMin (optional, integer): Minimum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- lotSizeMin (optional, integer): Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- lotSizeMax (optional, integer): Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- yearBuiltMin (optional, integer): Earliest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- yearBuiltMax (optional, integer): Latest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- amenities (optional, array): Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields. Constraints: max items: 7.\n- searchUrls (optional, array): Listing or search URLs for url mode. Constraints: max items: 3.\n- addresses (optional, array): Addresses for lookup mode. Constraints: max items: 10.\n- zpids (optional, array): Zillow property ids for lookup mode. Constraints: max items: 10.\n- propertyIds (optional, array): Provider property ids for lookup mode, currently used by the realtor-backed provider. Constraints: max items: 10.\n- locationSlug (optional, string): Provider-specific location slug for rental searches when city/state parsing is not enough.\n- state (optional, string): Two-letter state hint for rental searches. Constraints: min length: 2; max length: 2.\n- zipCode (optional, string): Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values.\n- maxRent (optional, integer): Maximum monthly rent. If omitted, priceMax is reused for rental searches. Constraints: min: 0.\n- petFriendly (optional, boolean): Rental search filter for pet-friendly listings. Constraints: default: false.\n- maxPages (optional, integer): Maximum rendered search pages for the Apartments-backed provider. Constraints: default: 1; min: 1; max: 2.\n- filterToRequestedCity (optional, boolean): Optional exact-city filter for Apartments-backed city searches.\n- includeSchools (optional, boolean): Include school data where the selected provider supports detail extraction. Constraints: default: true.\n- includeHistory (optional, boolean): Include price/tax history where the selected provider supports detail extraction. Constraints: default: true.\n- includeDetails (optional, boolean): Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows. Constraints: default: false.\n- smartScrape (optional, boolean): Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set. Constraints: default: false.\n- maxResults (optional, integer): Maximum listing rows to return. Detail-enriched calls are capped at 10 rows. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"source\": \"zillow\",\n  \"mode\": \"search\",\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"priceMin\": 200000,\n  \"priceMax\": 500000,\n  \"bedsMin\": 3,\n  \"bedsMax\": 4,\n  \"bathsMin\": 2,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1400,\n  \"sqftMax\": 3000,\n  \"homeTypes\": [\n    \"houses\",\n    \"townhomes\"\n  ],\n  \"includeDetails\": false,\n  \"maxResults\": 10\n}\n```",
      "category": "real-estate",
      "kind": "real-estate-tool",
      "departmentId": "real-estate",
      "department": "Real Estate",
      "aisleId": "listing-search",
      "aisle": "Listing Search",
      "shelfId": "homes-and-rentals",
      "shelf": "Homes And Rentals",
      "offeringId": "real-estate-listings-search",
      "offering": "Real Estate Listing Search",
      "pathIds": [
        "real-estate",
        "listing-search",
        "homes-and-rentals",
        "real-estate-listings-search"
      ],
      "pathLabels": [
        "Real Estate",
        "Listing Search",
        "Homes And Rentals",
        "Real Estate Listing Search"
      ],
      "taxonomyPath": "real-estate.listing-search.homes-and-rentals.real-estate-listings-search",
      "layout": {
        "department": {
          "id": "real-estate",
          "name": "Real Estate"
        },
        "aisle": {
          "id": "listing-search",
          "name": "Listing Search"
        },
        "shelf": {
          "id": "homes-and-rentals",
          "name": "Homes And Rentals"
        },
        "offering": {
          "id": "real-estate-listings-search",
          "name": "Real Estate Listing Search"
        },
        "pathIds": [
          "real-estate",
          "listing-search",
          "homes-and-rentals",
          "real-estate-listings-search"
        ],
        "pathLabels": [
          "Real Estate",
          "Listing Search",
          "Homes And Rentals",
          "Real Estate Listing Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "real-estate",
        "property-search",
        "home-listings",
        "housing",
        "for-sale",
        "for-rent",
        "rentals",
        "apartments",
        "apartments-com",
        "zillow",
        "realtor",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "50000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "50000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "description": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.",
        "anyOf": [
          {
            "title": "Market search",
            "properties": {
              "mode": {
                "const": "search"
              }
            },
            "anyOf": [
              {
                "required": [
                  "market"
                ]
              },
              {
                "required": [
                  "zipCode"
                ]
              }
            ]
          },
          {
            "title": "URL search",
            "properties": {
              "mode": {
                "const": "url"
              }
            },
            "required": [
              "searchUrls"
            ]
          },
          {
            "title": "Property lookup",
            "properties": {
              "mode": {
                "const": "lookup"
              }
            },
            "anyOf": [
              {
                "required": [
                  "addresses"
                ]
              },
              {
                "required": [
                  "zpids"
                ]
              },
              {
                "required": [
                  "propertyIds"
                ]
              }
            ]
          }
        ],
        "properties": {
          "source": {
            "type": "string",
            "enum": [
              "auto",
              "zillow",
              "apartments",
              "realtor"
            ],
            "default": "auto",
            "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments."
          },
          "mode": {
            "type": "string",
            "enum": [
              "search",
              "url",
              "lookup"
            ],
            "default": "search",
            "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids."
          },
          "market": {
            "type": "string",
            "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
          },
          "listingType": {
            "type": "string",
            "enum": [
              "for_sale",
              "recently_sold",
              "for_rent",
              "foreclosure"
            ],
            "default": "for_sale",
            "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages."
          },
          "priceMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum listing price or monthly rent in USD."
          },
          "priceMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum listing price or monthly rent in USD."
          },
          "bedsMin": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
          },
          "bedsMax": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
          },
          "bathsMin": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bathrooms. Half-bath values are accepted."
          },
          "bathsMax": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bathrooms. Half-bath values are accepted."
          },
          "homeTypes": {
            "type": "array",
            "maxItems": 7,
            "items": {
              "type": "string",
              "enum": [
                "houses",
                "townhomes",
                "multifamily",
                "condos",
                "land",
                "apartments",
                "manufactured"
              ],
              "description": "Home Types item filter for Real Estate Listing Search. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
            },
            "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded."
          },
          "propertyType": {
            "type": "string",
            "enum": [
              "apartments",
              "houses",
              "townhomes",
              "condos"
            ],
            "description": "Rental property type used by the Apartments-backed provider."
          },
          "bedrooms": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "any",
                  "studio",
                  "1",
                  "2",
                  "3",
                  "4",
                  "5+"
                ]
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 5
              }
            ],
            "description": "Rental bedroom filter used by the Apartments-backed provider."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "newest",
              "relevance",
              "pricea",
              "priced",
              "beds",
              "baths",
              "size",
              "lot",
              "zest"
            ],
            "default": "newest",
            "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters."
          },
          "daysOnMarket": {
            "type": "string",
            "enum": [
              "",
              "1",
              "7",
              "14",
              "30",
              "90",
              "6m",
              "12m",
              "24m",
              "36m"
            ],
            "default": "",
            "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set."
          },
          "sqftMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set."
          },
          "sqftMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set."
          },
          "lotSizeMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set."
          },
          "lotSizeMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set."
          },
          "yearBuiltMin": {
            "type": "integer",
            "minimum": 1800,
            "maximum": 2030,
            "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set."
          },
          "yearBuiltMax": {
            "type": "integer",
            "minimum": 1800,
            "maximum": 2030,
            "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set."
          },
          "amenities": {
            "type": "array",
            "maxItems": 7,
            "items": {
              "type": "string",
              "enum": [
                "pool",
                "ac",
                "waterfront",
                "single-story",
                "garage",
                "basement",
                "3d-tour"
              ],
              "description": "Amenities item filter for Real Estate Listing Search. Accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\". Constraints: accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\"."
            },
            "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields."
          },
          "searchUrls": {
            "type": "array",
            "maxItems": 3,
            "items": {
              "type": "string",
              "format": "uri",
              "description": "Search Urls item value for Real Estate Listing Search. Constraints: format: uri."
            },
            "description": "Listing or search URLs for url mode."
          },
          "addresses": {
            "type": "array",
            "maxItems": 10,
            "items": {
              "type": "string",
              "description": "Addresses item value for Real Estate Listing Search."
            },
            "description": "Addresses for lookup mode."
          },
          "zpids": {
            "type": "array",
            "maxItems": 10,
            "items": {
              "type": "string",
              "description": "Zpids item value for Real Estate Listing Search."
            },
            "description": "Zillow property ids for lookup mode."
          },
          "propertyIds": {
            "type": "array",
            "maxItems": 10,
            "items": {
              "type": "string",
              "description": "Property Ids item value for Real Estate Listing Search."
            },
            "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider."
          },
          "locationSlug": {
            "type": "string",
            "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
          },
          "state": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "description": "Two-letter state hint for rental searches."
          },
          "zipCode": {
            "type": "string",
            "pattern": "^\\d{5}$",
            "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
          },
          "maxRent": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches."
          },
          "petFriendly": {
            "type": "boolean",
            "default": false,
            "description": "Rental search filter for pet-friendly listings."
          },
          "maxPages": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2,
            "default": 1,
            "description": "Maximum rendered search pages for the Apartments-backed provider."
          },
          "filterToRequestedCity": {
            "type": "boolean",
            "description": "Optional exact-city filter for Apartments-backed city searches."
          },
          "includeSchools": {
            "type": "boolean",
            "default": true,
            "description": "Include school data where the selected provider supports detail extraction."
          },
          "includeHistory": {
            "type": "boolean",
            "default": true,
            "description": "Include price/tax history where the selected provider supports detail extraction."
          },
          "includeDetails": {
            "type": "boolean",
            "default": false,
            "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows."
          },
          "smartScrape": {
            "type": "boolean",
            "default": false,
            "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set."
          },
          "maxResults": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 10,
            "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "source",
          "mode",
          "market",
          "listingType",
          "priceMin",
          "priceMax",
          "bedsMin",
          "bedsMax",
          "bathsMin",
          "bathsMax",
          "homeTypes",
          "propertyType",
          "bedrooms",
          "sortBy",
          "daysOnMarket",
          "sqftMin",
          "sqftMax",
          "lotSizeMin",
          "lotSizeMax",
          "yearBuiltMin",
          "yearBuiltMax",
          "amenities",
          "searchUrls",
          "addresses",
          "zpids",
          "propertyIds",
          "locationSlug",
          "state",
          "zipCode",
          "maxRent",
          "petFriendly",
          "maxPages",
          "filterToRequestedCity",
          "includeSchools",
          "includeHistory",
          "includeDetails",
          "smartScrape",
          "maxResults"
        ],
        "fields": [
          {
            "name": "source",
            "type": "string",
            "required": false,
            "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments.",
            "constraints": {
              "enum": [
                "auto",
                "zillow",
                "apartments",
                "realtor"
              ],
              "default": "auto"
            }
          },
          {
            "name": "mode",
            "type": "string",
            "required": false,
            "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids.",
            "constraints": {
              "enum": [
                "search",
                "url",
                "lookup"
              ],
              "default": "search"
            }
          },
          {
            "name": "market",
            "type": "string",
            "required": false,
            "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
          },
          {
            "name": "listingType",
            "type": "string",
            "required": false,
            "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages.",
            "constraints": {
              "enum": [
                "for_sale",
                "recently_sold",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale"
            }
          },
          {
            "name": "priceMin",
            "type": "integer",
            "required": false,
            "description": "Minimum listing price or monthly rent in USD.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "priceMax",
            "type": "integer",
            "required": false,
            "description": "Maximum listing price or monthly rent in USD.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "bedsMin",
            "type": "integer",
            "required": false,
            "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bedsMax",
            "type": "integer",
            "required": false,
            "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMin",
            "type": "number",
            "required": false,
            "description": "Minimum bathrooms. Half-bath values are accepted.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMax",
            "type": "number",
            "required": false,
            "description": "Maximum bathrooms. Half-bath values are accepted.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "homeTypes",
            "type": "array",
            "required": false,
            "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded.",
            "constraints": {
              "maxItems": 7
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "propertyType",
            "type": "string",
            "required": false,
            "description": "Rental property type used by the Apartments-backed provider.",
            "constraints": {
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ]
            }
          },
          {
            "name": "bedrooms",
            "type": "any",
            "required": false,
            "description": "Rental bedroom filter used by the Apartments-backed provider."
          },
          {
            "name": "sortBy",
            "type": "string",
            "required": false,
            "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters.",
            "constraints": {
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest"
            }
          },
          {
            "name": "daysOnMarket",
            "type": "string",
            "required": false,
            "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set.",
            "constraints": {
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": ""
            }
          },
          {
            "name": "sqftMin",
            "type": "integer",
            "required": false,
            "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "sqftMax",
            "type": "integer",
            "required": false,
            "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "lotSizeMin",
            "type": "integer",
            "required": false,
            "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "lotSizeMax",
            "type": "integer",
            "required": false,
            "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "yearBuiltMin",
            "type": "integer",
            "required": false,
            "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set.",
            "constraints": {
              "minimum": 1800,
              "maximum": 2030
            }
          },
          {
            "name": "yearBuiltMax",
            "type": "integer",
            "required": false,
            "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set.",
            "constraints": {
              "minimum": 1800,
              "maximum": 2030
            }
          },
          {
            "name": "amenities",
            "type": "array",
            "required": false,
            "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields.",
            "constraints": {
              "maxItems": 7
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "searchUrls",
            "type": "array",
            "required": false,
            "description": "Listing or search URLs for url mode.",
            "constraints": {
              "maxItems": 3
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "addresses",
            "type": "array",
            "required": false,
            "description": "Addresses for lookup mode.",
            "constraints": {
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "zpids",
            "type": "array",
            "required": false,
            "description": "Zillow property ids for lookup mode.",
            "constraints": {
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "propertyIds",
            "type": "array",
            "required": false,
            "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider.",
            "constraints": {
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "locationSlug",
            "type": "string",
            "required": false,
            "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
          },
          {
            "name": "state",
            "type": "string",
            "required": false,
            "description": "Two-letter state hint for rental searches.",
            "constraints": {
              "minLength": 2,
              "maxLength": 2
            }
          },
          {
            "name": "zipCode",
            "type": "string",
            "required": false,
            "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
          },
          {
            "name": "maxRent",
            "type": "integer",
            "required": false,
            "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "petFriendly",
            "type": "boolean",
            "required": false,
            "description": "Rental search filter for pet-friendly listings.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "maxPages",
            "type": "integer",
            "required": false,
            "description": "Maximum rendered search pages for the Apartments-backed provider.",
            "constraints": {
              "default": 1,
              "minimum": 1,
              "maximum": 2
            }
          },
          {
            "name": "filterToRequestedCity",
            "type": "boolean",
            "required": false,
            "description": "Optional exact-city filter for Apartments-backed city searches."
          },
          {
            "name": "includeSchools",
            "type": "boolean",
            "required": false,
            "description": "Include school data where the selected provider supports detail extraction.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeHistory",
            "type": "boolean",
            "required": false,
            "description": "Include price/tax history where the selected provider supports detail extraction.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeDetails",
            "type": "boolean",
            "required": false,
            "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "smartScrape",
            "type": "boolean",
            "required": false,
            "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "maxResults",
            "type": "integer",
            "required": false,
            "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 20
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "source": "zillow",
          "mode": "search",
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "priceMin": 200000,
          "priceMax": 500000,
          "bedsMin": 3,
          "bedsMax": 4,
          "bathsMin": 2,
          "bathsMax": 4,
          "sqftMin": 1400,
          "sqftMax": 3000,
          "homeTypes": [
            "houses",
            "townhomes"
          ],
          "includeDetails": false,
          "maxResults": 10
        },
        "requirements": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned."
      },
      "exampleRequest": {
        "source": "zillow",
        "mode": "search",
        "market": "Houston, TX 77008",
        "zipCode": "77008",
        "listingType": "for_sale",
        "priceMin": 200000,
        "priceMax": 500000,
        "bedsMin": 3,
        "bedsMax": 4,
        "bathsMin": 2,
        "bathsMax": 4,
        "sqftMin": 1400,
        "sqftMax": 3000,
        "homeTypes": [
          "houses",
          "townhomes"
        ],
        "includeDetails": false,
        "maxResults": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "result_count",
          "results",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "result_count": {
            "type": "integer"
          },
          "filter_summary": {
            "type": "object",
            "description": "Counts before and after AgentBodega rechecks the requested filters against normalized rows.",
            "properties": {
              "normalized_count": {
                "type": "integer"
              },
              "matched_count": {
                "type": "integer"
              },
              "returned_count": {
                "type": "integer"
              },
              "excluded_count": {
                "type": "integer"
              }
            },
            "additionalProperties": false
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "source",
                "listing_id",
                "address"
              ],
              "properties": {
                "source": {
                  "type": "string",
                  "description": "Managed source class used to normalize the listing."
                },
                "listing_id": {
                  "type": "string"
                },
                "address": {
                  "type": "string"
                },
                "street": {
                  "type": "string"
                },
                "city": {
                  "type": "string"
                },
                "state": {
                  "type": "string"
                },
                "postal_code": {
                  "type": "string"
                },
                "latitude": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "longitude": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "price_usd": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "price_display": {
                  "type": "string"
                },
                "zestimate_usd": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "rent_zestimate_usd": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "tax_assessed_value_usd": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "beds": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "baths": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "sqft": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "lot_sqft": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "year_built": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "home_type": {
                  "type": "string"
                },
                "listing_status": {
                  "type": "string"
                },
                "days_on_market": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "description": {
                  "type": "string"
                },
                "listing_url": {
                  "type": "string",
                  "format": "uri"
                },
                "image_url": {
                  "type": "string",
                  "format": "uri"
                },
                "photo_urls": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uri"
                  }
                },
                "agent": {
                  "type": "object",
                  "additionalProperties": true
                },
                "price_history": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "tax_history": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "additionalProperties": true
            }
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "real-estate-listings-search",
          "name": "Real Estate Listing Search",
          "department": "Real Estate"
        },
        "requested": {
          "source": "zillow",
          "mode": "search",
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "filters": {
            "zipCode": "77008",
            "priceMin": 200000,
            "priceMax": 500000,
            "bedsMin": 3,
            "bedsMax": 4,
            "bathsMin": 2,
            "bathsMax": 4,
            "sqftMin": 1400,
            "sqftMax": 3000
          },
          "maxResults": 10,
          "includeDetails": false
        },
        "source": {
          "selected": "zillow",
          "routing": "managed-adapter",
          "resultFreshness": "live-run",
          "upstreamDetailsDisclosed": false
        },
        "result_count": 1,
        "filter_summary": {
          "normalized_count": 2,
          "matched_count": 1,
          "returned_count": 1,
          "excluded_count": 1
        },
        "results": [
          {
            "source": "zillow",
            "listing_id": "84007409",
            "address": "1328 W 23rd St Unit A, Houston, TX 77008",
            "price_usd": 450000,
            "beds": 3,
            "baths": 4,
            "sqft": 2043
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "source": "zillow",
                "mode": "search",
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "priceMin": 200000,
                "priceMax": 500000,
                "bedsMin": 3,
                "bedsMax": 4,
                "bathsMin": 2,
                "bathsMax": 4,
                "sqftMin": 1400,
                "sqftMax": 3000,
                "homeTypes": [
                  "houses",
                  "townhomes"
                ],
                "includeDetails": false,
                "maxResults": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "real-estate-listings-search",
                  "name": "Real Estate Listing Search",
                  "department": "Real Estate"
                },
                "requested": {
                  "source": "zillow",
                  "mode": "search",
                  "market": "Houston, TX 77008",
                  "zipCode": "77008",
                  "listingType": "for_sale",
                  "filters": {
                    "zipCode": "77008",
                    "priceMin": 200000,
                    "priceMax": 500000,
                    "bedsMin": 3,
                    "bedsMax": 4,
                    "bathsMin": 2,
                    "bathsMax": 4,
                    "sqftMin": 1400,
                    "sqftMax": 3000
                  },
                  "maxResults": 10,
                  "includeDetails": false
                },
                "source": {
                  "selected": "zillow",
                  "routing": "managed-adapter",
                  "resultFreshness": "live-run",
                  "upstreamDetailsDisclosed": false
                },
                "result_count": 1,
                "filter_summary": {
                  "normalized_count": 2,
                  "matched_count": 1,
                  "returned_count": 1,
                  "excluded_count": 1
                },
                "results": [
                  {
                    "source": "zillow",
                    "listing_id": "84007409",
                    "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                    "price_usd": 450000,
                    "beds": 3,
                    "baths": 4,
                    "sqft": 2043
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/real-estate/listings/search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "description": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.",
                    "anyOf": [
                      {
                        "title": "Market search",
                        "properties": {
                          "mode": {
                            "const": "search"
                          }
                        },
                        "anyOf": [
                          {
                            "required": [
                              "market"
                            ]
                          },
                          {
                            "required": [
                              "zipCode"
                            ]
                          }
                        ]
                      },
                      {
                        "title": "URL search",
                        "properties": {
                          "mode": {
                            "const": "url"
                          }
                        },
                        "required": [
                          "searchUrls"
                        ]
                      },
                      {
                        "title": "Property lookup",
                        "properties": {
                          "mode": {
                            "const": "lookup"
                          }
                        },
                        "anyOf": [
                          {
                            "required": [
                              "addresses"
                            ]
                          },
                          {
                            "required": [
                              "zpids"
                            ]
                          },
                          {
                            "required": [
                              "propertyIds"
                            ]
                          }
                        ]
                      }
                    ],
                    "properties": {
                      "source": {
                        "type": "string",
                        "enum": [
                          "auto",
                          "zillow",
                          "apartments",
                          "realtor"
                        ],
                        "default": "auto",
                        "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments."
                      },
                      "mode": {
                        "type": "string",
                        "enum": [
                          "search",
                          "url",
                          "lookup"
                        ],
                        "default": "search",
                        "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids."
                      },
                      "market": {
                        "type": "string",
                        "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
                      },
                      "listingType": {
                        "type": "string",
                        "enum": [
                          "for_sale",
                          "recently_sold",
                          "for_rent",
                          "foreclosure"
                        ],
                        "default": "for_sale",
                        "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages."
                      },
                      "priceMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum listing price or monthly rent in USD."
                      },
                      "priceMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum listing price or monthly rent in USD."
                      },
                      "bedsMin": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
                      },
                      "bedsMax": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
                      },
                      "bathsMin": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bathrooms. Half-bath values are accepted."
                      },
                      "bathsMax": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bathrooms. Half-bath values are accepted."
                      },
                      "homeTypes": {
                        "type": "array",
                        "maxItems": 7,
                        "items": {
                          "type": "string",
                          "enum": [
                            "houses",
                            "townhomes",
                            "multifamily",
                            "condos",
                            "land",
                            "apartments",
                            "manufactured"
                          ],
                          "description": "Home Types item filter for Real Estate Listing Search. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                        },
                        "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded."
                      },
                      "propertyType": {
                        "type": "string",
                        "enum": [
                          "apartments",
                          "houses",
                          "townhomes",
                          "condos"
                        ],
                        "description": "Rental property type used by the Apartments-backed provider."
                      },
                      "bedrooms": {
                        "oneOf": [
                          {
                            "type": "string",
                            "enum": [
                              "any",
                              "studio",
                              "1",
                              "2",
                              "3",
                              "4",
                              "5+"
                            ]
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 5
                          }
                        ],
                        "description": "Rental bedroom filter used by the Apartments-backed provider."
                      },
                      "sortBy": {
                        "type": "string",
                        "enum": [
                          "newest",
                          "relevance",
                          "pricea",
                          "priced",
                          "beds",
                          "baths",
                          "size",
                          "lot",
                          "zest"
                        ],
                        "default": "newest",
                        "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters."
                      },
                      "daysOnMarket": {
                        "type": "string",
                        "enum": [
                          "",
                          "1",
                          "7",
                          "14",
                          "30",
                          "90",
                          "6m",
                          "12m",
                          "24m",
                          "36m"
                        ],
                        "default": "",
                        "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set."
                      },
                      "sqftMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set."
                      },
                      "sqftMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set."
                      },
                      "lotSizeMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set."
                      },
                      "lotSizeMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set."
                      },
                      "yearBuiltMin": {
                        "type": "integer",
                        "minimum": 1800,
                        "maximum": 2030,
                        "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set."
                      },
                      "yearBuiltMax": {
                        "type": "integer",
                        "minimum": 1800,
                        "maximum": 2030,
                        "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set."
                      },
                      "amenities": {
                        "type": "array",
                        "maxItems": 7,
                        "items": {
                          "type": "string",
                          "enum": [
                            "pool",
                            "ac",
                            "waterfront",
                            "single-story",
                            "garage",
                            "basement",
                            "3d-tour"
                          ],
                          "description": "Amenities item filter for Real Estate Listing Search. Accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\". Constraints: accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\"."
                        },
                        "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields."
                      },
                      "searchUrls": {
                        "type": "array",
                        "maxItems": 3,
                        "items": {
                          "type": "string",
                          "format": "uri",
                          "description": "Search Urls item value for Real Estate Listing Search. Constraints: format: uri."
                        },
                        "description": "Listing or search URLs for url mode."
                      },
                      "addresses": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "description": "Addresses item value for Real Estate Listing Search."
                        },
                        "description": "Addresses for lookup mode."
                      },
                      "zpids": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "description": "Zpids item value for Real Estate Listing Search."
                        },
                        "description": "Zillow property ids for lookup mode."
                      },
                      "propertyIds": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "description": "Property Ids item value for Real Estate Listing Search."
                        },
                        "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider."
                      },
                      "locationSlug": {
                        "type": "string",
                        "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
                      },
                      "state": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 2,
                        "description": "Two-letter state hint for rental searches."
                      },
                      "zipCode": {
                        "type": "string",
                        "pattern": "^\\d{5}$",
                        "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
                      },
                      "maxRent": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches."
                      },
                      "petFriendly": {
                        "type": "boolean",
                        "default": false,
                        "description": "Rental search filter for pet-friendly listings."
                      },
                      "maxPages": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 2,
                        "default": 1,
                        "description": "Maximum rendered search pages for the Apartments-backed provider."
                      },
                      "filterToRequestedCity": {
                        "type": "boolean",
                        "description": "Optional exact-city filter for Apartments-backed city searches."
                      },
                      "includeSchools": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include school data where the selected provider supports detail extraction."
                      },
                      "includeHistory": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include price/tax history where the selected provider supports detail extraction."
                      },
                      "includeDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows."
                      },
                      "smartScrape": {
                        "type": "boolean",
                        "default": false,
                        "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set."
                      },
                      "maxResults": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 10,
                        "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "result_count",
                      "results",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "result_count": {
                        "type": "integer"
                      },
                      "filter_summary": {
                        "type": "object",
                        "description": "Counts before and after AgentBodega rechecks the requested filters against normalized rows.",
                        "properties": {
                          "normalized_count": {
                            "type": "integer"
                          },
                          "matched_count": {
                            "type": "integer"
                          },
                          "returned_count": {
                            "type": "integer"
                          },
                          "excluded_count": {
                            "type": "integer"
                          }
                        },
                        "additionalProperties": false
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "source",
                            "listing_id",
                            "address"
                          ],
                          "properties": {
                            "source": {
                              "type": "string",
                              "description": "Managed source class used to normalize the listing."
                            },
                            "listing_id": {
                              "type": "string"
                            },
                            "address": {
                              "type": "string"
                            },
                            "street": {
                              "type": "string"
                            },
                            "city": {
                              "type": "string"
                            },
                            "state": {
                              "type": "string"
                            },
                            "postal_code": {
                              "type": "string"
                            },
                            "latitude": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "longitude": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "price_usd": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "price_display": {
                              "type": "string"
                            },
                            "zestimate_usd": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "rent_zestimate_usd": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "tax_assessed_value_usd": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "beds": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "baths": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "sqft": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "lot_sqft": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "year_built": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "home_type": {
                              "type": "string"
                            },
                            "listing_status": {
                              "type": "string"
                            },
                            "days_on_market": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "description": {
                              "type": "string"
                            },
                            "listing_url": {
                              "type": "string",
                              "format": "uri"
                            },
                            "image_url": {
                              "type": "string",
                              "format": "uri"
                            },
                            "photo_urls": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "format": "uri"
                              }
                            },
                            "agent": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "price_history": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "additionalProperties": true
                              }
                            },
                            "tax_history": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "additionalProperties": true
                              }
                            },
                            "warnings": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "real-estate-listings-search",
            "url": "https://agentbodega.store/api/real-estate/listings/search",
            "method": "POST",
            "description": "Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.",
            "longDescription": "Purpose: Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nBest use: Use this when an agent needs search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.\nOptional fields: source, mode, market, listingType, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, homeTypes, propertyType, bedrooms, sortBy, daysOnMarket, sqftMin, sqftMax, lotSizeMin, lotSizeMax, yearBuiltMin, yearBuiltMax, amenities, searchUrls, addresses, zpids, propertyIds, locationSlug, state, zipCode, maxRent, petFriendly, maxPages, filterToRequestedCity, includeSchools, includeHistory, includeDetails, smartScrape, maxResults.\n\nAccepted fields:\n- source (optional, string): Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments. Constraints: accepted values: \"auto\", \"zillow\", \"apartments\", \"realtor\"; default: \"auto\".\n- mode (optional, string): Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids. Constraints: accepted values: \"search\", \"url\", \"lookup\"; default: \"search\".\n- market (optional, string): City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required.\n- listingType (optional, string): Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages. Constraints: accepted values: \"for_sale\", \"recently_sold\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- priceMin (optional, integer): Minimum listing price or monthly rent in USD. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- homeTypes (optional, array): Allowed home types. Returned rows without a verifiable matching normalized home type are excluded. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used by the Apartments-backed provider. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used by the Apartments-backed provider.\n- sortBy (optional, string): Managed-source collection order before AgentBodega normalizes and rechecks the requested filters. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- sqftMin (optional, integer): Minimum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- lotSizeMin (optional, integer): Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- lotSizeMax (optional, integer): Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- yearBuiltMin (optional, integer): Earliest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- yearBuiltMax (optional, integer): Latest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- amenities (optional, array): Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields. Constraints: max items: 7.\n- searchUrls (optional, array): Listing or search URLs for url mode. Constraints: max items: 3.\n- addresses (optional, array): Addresses for lookup mode. Constraints: max items: 10.\n- zpids (optional, array): Zillow property ids for lookup mode. Constraints: max items: 10.\n- propertyIds (optional, array): Provider property ids for lookup mode, currently used by the realtor-backed provider. Constraints: max items: 10.\n- locationSlug (optional, string): Provider-specific location slug for rental searches when city/state parsing is not enough.\n- state (optional, string): Two-letter state hint for rental searches. Constraints: min length: 2; max length: 2.\n- zipCode (optional, string): Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values.\n- maxRent (optional, integer): Maximum monthly rent. If omitted, priceMax is reused for rental searches. Constraints: min: 0.\n- petFriendly (optional, boolean): Rental search filter for pet-friendly listings. Constraints: default: false.\n- maxPages (optional, integer): Maximum rendered search pages for the Apartments-backed provider. Constraints: default: 1; min: 1; max: 2.\n- filterToRequestedCity (optional, boolean): Optional exact-city filter for Apartments-backed city searches.\n- includeSchools (optional, boolean): Include school data where the selected provider supports detail extraction. Constraints: default: true.\n- includeHistory (optional, boolean): Include price/tax history where the selected provider supports detail extraction. Constraints: default: true.\n- includeDetails (optional, boolean): Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows. Constraints: default: false.\n- smartScrape (optional, boolean): Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set. Constraints: default: false.\n- maxResults (optional, integer): Maximum listing rows to return. Detail-enriched calls are capped at 10 rows. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"source\": \"zillow\",\n  \"mode\": \"search\",\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"priceMin\": 200000,\n  \"priceMax\": 500000,\n  \"bedsMin\": 3,\n  \"bedsMax\": 4,\n  \"bathsMin\": 2,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1400,\n  \"sqftMax\": 3000,\n  \"homeTypes\": [\n    \"houses\",\n    \"townhomes\"\n  ],\n  \"includeDetails\": false,\n  \"maxResults\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Real Estate Listing Search",
            "category": "real-estate",
            "kind": "real-estate-tool",
            "tags": [
              "real-estate",
              "property-search",
              "home-listings",
              "housing",
              "for-sale",
              "for-rent",
              "rentals",
              "apartments",
              "apartments-com",
              "zillow",
              "realtor",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "source",
                "mode",
                "market",
                "listingType",
                "priceMin",
                "priceMax",
                "bedsMin",
                "bedsMax",
                "bathsMin",
                "bathsMax",
                "homeTypes",
                "propertyType",
                "bedrooms",
                "sortBy",
                "daysOnMarket",
                "sqftMin",
                "sqftMax",
                "lotSizeMin",
                "lotSizeMax",
                "yearBuiltMin",
                "yearBuiltMax",
                "amenities",
                "searchUrls",
                "addresses",
                "zpids",
                "propertyIds",
                "locationSlug",
                "state",
                "zipCode",
                "maxRent",
                "petFriendly",
                "maxPages",
                "filterToRequestedCity",
                "includeSchools",
                "includeHistory",
                "includeDetails",
                "smartScrape",
                "maxResults"
              ],
              "fields": [
                {
                  "name": "source",
                  "type": "string",
                  "required": false,
                  "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments.",
                  "constraints": {
                    "enum": [
                      "auto",
                      "zillow",
                      "apartments",
                      "realtor"
                    ],
                    "default": "auto"
                  }
                },
                {
                  "name": "mode",
                  "type": "string",
                  "required": false,
                  "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids.",
                  "constraints": {
                    "enum": [
                      "search",
                      "url",
                      "lookup"
                    ],
                    "default": "search"
                  }
                },
                {
                  "name": "market",
                  "type": "string",
                  "required": false,
                  "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
                },
                {
                  "name": "listingType",
                  "type": "string",
                  "required": false,
                  "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages.",
                  "constraints": {
                    "enum": [
                      "for_sale",
                      "recently_sold",
                      "for_rent",
                      "foreclosure"
                    ],
                    "default": "for_sale"
                  }
                },
                {
                  "name": "priceMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum listing price or monthly rent in USD.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "priceMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum listing price or monthly rent in USD.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "bedsMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bedsMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMin",
                  "type": "number",
                  "required": false,
                  "description": "Minimum bathrooms. Half-bath values are accepted.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMax",
                  "type": "number",
                  "required": false,
                  "description": "Maximum bathrooms. Half-bath values are accepted.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "homeTypes",
                  "type": "array",
                  "required": false,
                  "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded.",
                  "constraints": {
                    "maxItems": 7
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "propertyType",
                  "type": "string",
                  "required": false,
                  "description": "Rental property type used by the Apartments-backed provider.",
                  "constraints": {
                    "enum": [
                      "apartments",
                      "houses",
                      "townhomes",
                      "condos"
                    ]
                  }
                },
                {
                  "name": "bedrooms",
                  "type": "any",
                  "required": false,
                  "description": "Rental bedroom filter used by the Apartments-backed provider."
                },
                {
                  "name": "sortBy",
                  "type": "string",
                  "required": false,
                  "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters.",
                  "constraints": {
                    "enum": [
                      "newest",
                      "relevance",
                      "pricea",
                      "priced",
                      "beds",
                      "baths",
                      "size",
                      "lot",
                      "zest"
                    ],
                    "default": "newest"
                  }
                },
                {
                  "name": "daysOnMarket",
                  "type": "string",
                  "required": false,
                  "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set.",
                  "constraints": {
                    "enum": [
                      "",
                      "1",
                      "7",
                      "14",
                      "30",
                      "90",
                      "6m",
                      "12m",
                      "24m",
                      "36m"
                    ],
                    "default": ""
                  }
                },
                {
                  "name": "sqftMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "sqftMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "lotSizeMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "lotSizeMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "yearBuiltMin",
                  "type": "integer",
                  "required": false,
                  "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set.",
                  "constraints": {
                    "minimum": 1800,
                    "maximum": 2030
                  }
                },
                {
                  "name": "yearBuiltMax",
                  "type": "integer",
                  "required": false,
                  "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set.",
                  "constraints": {
                    "minimum": 1800,
                    "maximum": 2030
                  }
                },
                {
                  "name": "amenities",
                  "type": "array",
                  "required": false,
                  "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields.",
                  "constraints": {
                    "maxItems": 7
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "searchUrls",
                  "type": "array",
                  "required": false,
                  "description": "Listing or search URLs for url mode.",
                  "constraints": {
                    "maxItems": 3
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "addresses",
                  "type": "array",
                  "required": false,
                  "description": "Addresses for lookup mode.",
                  "constraints": {
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "zpids",
                  "type": "array",
                  "required": false,
                  "description": "Zillow property ids for lookup mode.",
                  "constraints": {
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "propertyIds",
                  "type": "array",
                  "required": false,
                  "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider.",
                  "constraints": {
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "locationSlug",
                  "type": "string",
                  "required": false,
                  "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
                },
                {
                  "name": "state",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter state hint for rental searches.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "zipCode",
                  "type": "string",
                  "required": false,
                  "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
                },
                {
                  "name": "maxRent",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "petFriendly",
                  "type": "boolean",
                  "required": false,
                  "description": "Rental search filter for pet-friendly listings.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "maxPages",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum rendered search pages for the Apartments-backed provider.",
                  "constraints": {
                    "default": 1,
                    "minimum": 1,
                    "maximum": 2
                  }
                },
                {
                  "name": "filterToRequestedCity",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional exact-city filter for Apartments-backed city searches."
                },
                {
                  "name": "includeSchools",
                  "type": "boolean",
                  "required": false,
                  "description": "Include school data where the selected provider supports detail extraction.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeHistory",
                  "type": "boolean",
                  "required": false,
                  "description": "Include price/tax history where the selected provider supports detail extraction.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "smartScrape",
                  "type": "boolean",
                  "required": false,
                  "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "maxResults",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 20
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "source": "zillow",
                "mode": "search",
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "priceMin": 200000,
                "priceMax": 500000,
                "bedsMin": 3,
                "bedsMax": 4,
                "bathsMin": 2,
                "bathsMax": 4,
                "sqftMin": 1400,
                "sqftMax": 3000,
                "homeTypes": [
                  "houses",
                  "townhomes"
                ],
                "includeDetails": false,
                "maxResults": 10
              },
              "requirements": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned."
            },
            "inputSchema": {
              "type": "object",
              "description": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.",
              "anyOf": [
                {
                  "title": "Market search",
                  "properties": {
                    "mode": {
                      "const": "search"
                    }
                  },
                  "anyOf": [
                    {
                      "required": [
                        "market"
                      ]
                    },
                    {
                      "required": [
                        "zipCode"
                      ]
                    }
                  ]
                },
                {
                  "title": "URL search",
                  "properties": {
                    "mode": {
                      "const": "url"
                    }
                  },
                  "required": [
                    "searchUrls"
                  ]
                },
                {
                  "title": "Property lookup",
                  "properties": {
                    "mode": {
                      "const": "lookup"
                    }
                  },
                  "anyOf": [
                    {
                      "required": [
                        "addresses"
                      ]
                    },
                    {
                      "required": [
                        "zpids"
                      ]
                    },
                    {
                      "required": [
                        "propertyIds"
                      ]
                    }
                  ]
                }
              ],
              "properties": {
                "source": {
                  "type": "string",
                  "enum": [
                    "auto",
                    "zillow",
                    "apartments",
                    "realtor"
                  ],
                  "default": "auto",
                  "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments."
                },
                "mode": {
                  "type": "string",
                  "enum": [
                    "search",
                    "url",
                    "lookup"
                  ],
                  "default": "search",
                  "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids."
                },
                "market": {
                  "type": "string",
                  "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
                },
                "listingType": {
                  "type": "string",
                  "enum": [
                    "for_sale",
                    "recently_sold",
                    "for_rent",
                    "foreclosure"
                  ],
                  "default": "for_sale",
                  "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages."
                },
                "priceMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum listing price or monthly rent in USD."
                },
                "priceMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum listing price or monthly rent in USD."
                },
                "bedsMin": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
                },
                "bedsMax": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
                },
                "bathsMin": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bathrooms. Half-bath values are accepted."
                },
                "bathsMax": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bathrooms. Half-bath values are accepted."
                },
                "homeTypes": {
                  "type": "array",
                  "maxItems": 7,
                  "items": {
                    "type": "string",
                    "enum": [
                      "houses",
                      "townhomes",
                      "multifamily",
                      "condos",
                      "land",
                      "apartments",
                      "manufactured"
                    ],
                    "description": "Home Types item filter for Real Estate Listing Search. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                  },
                  "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded."
                },
                "propertyType": {
                  "type": "string",
                  "enum": [
                    "apartments",
                    "houses",
                    "townhomes",
                    "condos"
                  ],
                  "description": "Rental property type used by the Apartments-backed provider."
                },
                "bedrooms": {
                  "oneOf": [
                    {
                      "type": "string",
                      "enum": [
                        "any",
                        "studio",
                        "1",
                        "2",
                        "3",
                        "4",
                        "5+"
                      ]
                    },
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 5
                    }
                  ],
                  "description": "Rental bedroom filter used by the Apartments-backed provider."
                },
                "sortBy": {
                  "type": "string",
                  "enum": [
                    "newest",
                    "relevance",
                    "pricea",
                    "priced",
                    "beds",
                    "baths",
                    "size",
                    "lot",
                    "zest"
                  ],
                  "default": "newest",
                  "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters."
                },
                "daysOnMarket": {
                  "type": "string",
                  "enum": [
                    "",
                    "1",
                    "7",
                    "14",
                    "30",
                    "90",
                    "6m",
                    "12m",
                    "24m",
                    "36m"
                  ],
                  "default": "",
                  "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set."
                },
                "sqftMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set."
                },
                "sqftMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set."
                },
                "lotSizeMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set."
                },
                "lotSizeMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set."
                },
                "yearBuiltMin": {
                  "type": "integer",
                  "minimum": 1800,
                  "maximum": 2030,
                  "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set."
                },
                "yearBuiltMax": {
                  "type": "integer",
                  "minimum": 1800,
                  "maximum": 2030,
                  "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set."
                },
                "amenities": {
                  "type": "array",
                  "maxItems": 7,
                  "items": {
                    "type": "string",
                    "enum": [
                      "pool",
                      "ac",
                      "waterfront",
                      "single-story",
                      "garage",
                      "basement",
                      "3d-tour"
                    ],
                    "description": "Amenities item filter for Real Estate Listing Search. Accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\". Constraints: accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\"."
                  },
                  "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields."
                },
                "searchUrls": {
                  "type": "array",
                  "maxItems": 3,
                  "items": {
                    "type": "string",
                    "format": "uri",
                    "description": "Search Urls item value for Real Estate Listing Search. Constraints: format: uri."
                  },
                  "description": "Listing or search URLs for url mode."
                },
                "addresses": {
                  "type": "array",
                  "maxItems": 10,
                  "items": {
                    "type": "string",
                    "description": "Addresses item value for Real Estate Listing Search."
                  },
                  "description": "Addresses for lookup mode."
                },
                "zpids": {
                  "type": "array",
                  "maxItems": 10,
                  "items": {
                    "type": "string",
                    "description": "Zpids item value for Real Estate Listing Search."
                  },
                  "description": "Zillow property ids for lookup mode."
                },
                "propertyIds": {
                  "type": "array",
                  "maxItems": 10,
                  "items": {
                    "type": "string",
                    "description": "Property Ids item value for Real Estate Listing Search."
                  },
                  "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider."
                },
                "locationSlug": {
                  "type": "string",
                  "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
                },
                "state": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "description": "Two-letter state hint for rental searches."
                },
                "zipCode": {
                  "type": "string",
                  "pattern": "^\\d{5}$",
                  "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
                },
                "maxRent": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches."
                },
                "petFriendly": {
                  "type": "boolean",
                  "default": false,
                  "description": "Rental search filter for pet-friendly listings."
                },
                "maxPages": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 2,
                  "default": 1,
                  "description": "Maximum rendered search pages for the Apartments-backed provider."
                },
                "filterToRequestedCity": {
                  "type": "boolean",
                  "description": "Optional exact-city filter for Apartments-backed city searches."
                },
                "includeSchools": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include school data where the selected provider supports detail extraction."
                },
                "includeHistory": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include price/tax history where the selected provider supports detail extraction."
                },
                "includeDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows."
                },
                "smartScrape": {
                  "type": "boolean",
                  "default": false,
                  "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set."
                },
                "maxResults": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 10,
                  "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "result_count",
                "results",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "result_count": {
                  "type": "integer"
                },
                "filter_summary": {
                  "type": "object",
                  "description": "Counts before and after AgentBodega rechecks the requested filters against normalized rows.",
                  "properties": {
                    "normalized_count": {
                      "type": "integer"
                    },
                    "matched_count": {
                      "type": "integer"
                    },
                    "returned_count": {
                      "type": "integer"
                    },
                    "excluded_count": {
                      "type": "integer"
                    }
                  },
                  "additionalProperties": false
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "source",
                      "listing_id",
                      "address"
                    ],
                    "properties": {
                      "source": {
                        "type": "string",
                        "description": "Managed source class used to normalize the listing."
                      },
                      "listing_id": {
                        "type": "string"
                      },
                      "address": {
                        "type": "string"
                      },
                      "street": {
                        "type": "string"
                      },
                      "city": {
                        "type": "string"
                      },
                      "state": {
                        "type": "string"
                      },
                      "postal_code": {
                        "type": "string"
                      },
                      "latitude": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "longitude": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_display": {
                        "type": "string"
                      },
                      "zestimate_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "rent_zestimate_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "tax_assessed_value_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "beds": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "baths": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "lot_sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "year_built": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "home_type": {
                        "type": "string"
                      },
                      "listing_status": {
                        "type": "string"
                      },
                      "days_on_market": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "description": {
                        "type": "string"
                      },
                      "listing_url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "image_url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "photo_urls": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "uri"
                        }
                      },
                      "agent": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "price_history": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "tax_history": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "warnings": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.05"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.05",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/real-estate/listings/search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.05"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/real-estate/listings/search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "real-estate",
        "kind": "real-estate-tool",
        "taxonomy": {
          "departmentId": "real-estate",
          "department": "Real Estate",
          "aisleId": "listing-search",
          "aisle": "Listing Search",
          "shelfId": "homes-and-rentals",
          "shelf": "Homes And Rentals",
          "offeringId": "real-estate-listings-search",
          "offering": "Real Estate Listing Search",
          "pathIds": [
            "real-estate",
            "listing-search",
            "homes-and-rentals",
            "real-estate-listings-search"
          ],
          "pathLabels": [
            "Real Estate",
            "Listing Search",
            "Homes And Rentals",
            "Real Estate Listing Search"
          ],
          "taxonomyPath": "real-estate.listing-search.homes-and-rentals.real-estate-listings-search",
          "layout": {
            "department": {
              "id": "real-estate",
              "name": "Real Estate"
            },
            "aisle": {
              "id": "listing-search",
              "name": "Listing Search"
            },
            "shelf": {
              "id": "homes-and-rentals",
              "name": "Homes And Rentals"
            },
            "offering": {
              "id": "real-estate-listings-search",
              "name": "Real Estate Listing Search"
            },
            "pathIds": [
              "real-estate",
              "listing-search",
              "homes-and-rentals",
              "real-estate-listings-search"
            ],
            "pathLabels": [
              "Real Estate",
              "Listing Search",
              "Homes And Rentals",
              "Real Estate Listing Search"
            ]
          }
        },
        "description": {
          "short": "Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.",
          "full": "Purpose: Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nBest use: Use this when an agent needs search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.\nOptional fields: source, mode, market, listingType, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, homeTypes, propertyType, bedrooms, sortBy, daysOnMarket, sqftMin, sqftMax, lotSizeMin, lotSizeMax, yearBuiltMin, yearBuiltMax, amenities, searchUrls, addresses, zpids, propertyIds, locationSlug, state, zipCode, maxRent, petFriendly, maxPages, filterToRequestedCity, includeSchools, includeHistory, includeDetails, smartScrape, maxResults.\n\nAccepted fields:\n- source (optional, string): Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments. Constraints: accepted values: \"auto\", \"zillow\", \"apartments\", \"realtor\"; default: \"auto\".\n- mode (optional, string): Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids. Constraints: accepted values: \"search\", \"url\", \"lookup\"; default: \"search\".\n- market (optional, string): City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required.\n- listingType (optional, string): Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages. Constraints: accepted values: \"for_sale\", \"recently_sold\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- priceMin (optional, integer): Minimum listing price or monthly rent in USD. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- homeTypes (optional, array): Allowed home types. Returned rows without a verifiable matching normalized home type are excluded. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used by the Apartments-backed provider. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used by the Apartments-backed provider.\n- sortBy (optional, string): Managed-source collection order before AgentBodega normalizes and rechecks the requested filters. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- sqftMin (optional, integer): Minimum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- lotSizeMin (optional, integer): Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- lotSizeMax (optional, integer): Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- yearBuiltMin (optional, integer): Earliest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- yearBuiltMax (optional, integer): Latest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- amenities (optional, array): Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields. Constraints: max items: 7.\n- searchUrls (optional, array): Listing or search URLs for url mode. Constraints: max items: 3.\n- addresses (optional, array): Addresses for lookup mode. Constraints: max items: 10.\n- zpids (optional, array): Zillow property ids for lookup mode. Constraints: max items: 10.\n- propertyIds (optional, array): Provider property ids for lookup mode, currently used by the realtor-backed provider. Constraints: max items: 10.\n- locationSlug (optional, string): Provider-specific location slug for rental searches when city/state parsing is not enough.\n- state (optional, string): Two-letter state hint for rental searches. Constraints: min length: 2; max length: 2.\n- zipCode (optional, string): Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values.\n- maxRent (optional, integer): Maximum monthly rent. If omitted, priceMax is reused for rental searches. Constraints: min: 0.\n- petFriendly (optional, boolean): Rental search filter for pet-friendly listings. Constraints: default: false.\n- maxPages (optional, integer): Maximum rendered search pages for the Apartments-backed provider. Constraints: default: 1; min: 1; max: 2.\n- filterToRequestedCity (optional, boolean): Optional exact-city filter for Apartments-backed city searches.\n- includeSchools (optional, boolean): Include school data where the selected provider supports detail extraction. Constraints: default: true.\n- includeHistory (optional, boolean): Include price/tax history where the selected provider supports detail extraction. Constraints: default: true.\n- includeDetails (optional, boolean): Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows. Constraints: default: false.\n- smartScrape (optional, boolean): Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set. Constraints: default: false.\n- maxResults (optional, integer): Maximum listing rows to return. Detail-enriched calls are capped at 10 rows. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"source\": \"zillow\",\n  \"mode\": \"search\",\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"priceMin\": 200000,\n  \"priceMax\": 500000,\n  \"bedsMin\": 3,\n  \"bedsMax\": 4,\n  \"bathsMin\": 2,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1400,\n  \"sqftMax\": 3000,\n  \"homeTypes\": [\n    \"houses\",\n    \"townhomes\"\n  ],\n  \"includeDetails\": false,\n  \"maxResults\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "description": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.",
          "anyOf": [
            {
              "title": "Market search",
              "properties": {
                "mode": {
                  "const": "search"
                }
              },
              "anyOf": [
                {
                  "required": [
                    "market"
                  ]
                },
                {
                  "required": [
                    "zipCode"
                  ]
                }
              ]
            },
            {
              "title": "URL search",
              "properties": {
                "mode": {
                  "const": "url"
                }
              },
              "required": [
                "searchUrls"
              ]
            },
            {
              "title": "Property lookup",
              "properties": {
                "mode": {
                  "const": "lookup"
                }
              },
              "anyOf": [
                {
                  "required": [
                    "addresses"
                  ]
                },
                {
                  "required": [
                    "zpids"
                  ]
                },
                {
                  "required": [
                    "propertyIds"
                  ]
                }
              ]
            }
          ],
          "properties": {
            "source": {
              "type": "string",
              "enum": [
                "auto",
                "zillow",
                "apartments",
                "realtor"
              ],
              "default": "auto",
              "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments."
            },
            "mode": {
              "type": "string",
              "enum": [
                "search",
                "url",
                "lookup"
              ],
              "default": "search",
              "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids."
            },
            "market": {
              "type": "string",
              "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "recently_sold",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price or monthly rent in USD."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Half-bath values are accepted."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Half-bath values are accepted."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Listing Search. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used by the Apartments-backed provider."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used by the Apartments-backed provider."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set."
            },
            "lotSizeMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set."
            },
            "lotSizeMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set."
            },
            "yearBuiltMin": {
              "type": "integer",
              "minimum": 1800,
              "maximum": 2030,
              "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set."
            },
            "yearBuiltMax": {
              "type": "integer",
              "minimum": 1800,
              "maximum": 2030,
              "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set."
            },
            "amenities": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "pool",
                  "ac",
                  "waterfront",
                  "single-story",
                  "garage",
                  "basement",
                  "3d-tour"
                ],
                "description": "Amenities item filter for Real Estate Listing Search. Accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\". Constraints: accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\"."
              },
              "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields."
            },
            "searchUrls": {
              "type": "array",
              "maxItems": 3,
              "items": {
                "type": "string",
                "format": "uri",
                "description": "Search Urls item value for Real Estate Listing Search. Constraints: format: uri."
              },
              "description": "Listing or search URLs for url mode."
            },
            "addresses": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Addresses item value for Real Estate Listing Search."
              },
              "description": "Addresses for lookup mode."
            },
            "zpids": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Zpids item value for Real Estate Listing Search."
              },
              "description": "Zillow property ids for lookup mode."
            },
            "propertyIds": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Property Ids item value for Real Estate Listing Search."
              },
              "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider."
            },
            "locationSlug": {
              "type": "string",
              "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
            },
            "state": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2,
              "description": "Two-letter state hint for rental searches."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches."
            },
            "petFriendly": {
              "type": "boolean",
              "default": false,
              "description": "Rental search filter for pet-friendly listings."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered search pages for the Apartments-backed provider."
            },
            "filterToRequestedCity": {
              "type": "boolean",
              "description": "Optional exact-city filter for Apartments-backed city searches."
            },
            "includeSchools": {
              "type": "boolean",
              "default": true,
              "description": "Include school data where the selected provider supports detail extraction."
            },
            "includeHistory": {
              "type": "boolean",
              "default": true,
              "description": "Include price/tax history where the selected provider supports detail extraction."
            },
            "includeDetails": {
              "type": "boolean",
              "default": false,
              "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows."
            },
            "smartScrape": {
              "type": "boolean",
              "default": false,
              "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "description": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.",
          "anyOf": [
            {
              "title": "Market search",
              "properties": {
                "mode": {
                  "const": "search"
                }
              },
              "anyOf": [
                {
                  "required": [
                    "market"
                  ]
                },
                {
                  "required": [
                    "zipCode"
                  ]
                }
              ]
            },
            {
              "title": "URL search",
              "properties": {
                "mode": {
                  "const": "url"
                }
              },
              "required": [
                "searchUrls"
              ]
            },
            {
              "title": "Property lookup",
              "properties": {
                "mode": {
                  "const": "lookup"
                }
              },
              "anyOf": [
                {
                  "required": [
                    "addresses"
                  ]
                },
                {
                  "required": [
                    "zpids"
                  ]
                },
                {
                  "required": [
                    "propertyIds"
                  ]
                }
              ]
            }
          ],
          "properties": {
            "source": {
              "type": "string",
              "enum": [
                "auto",
                "zillow",
                "apartments",
                "realtor"
              ],
              "default": "auto",
              "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments."
            },
            "mode": {
              "type": "string",
              "enum": [
                "search",
                "url",
                "lookup"
              ],
              "default": "search",
              "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids."
            },
            "market": {
              "type": "string",
              "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "recently_sold",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price or monthly rent in USD."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Half-bath values are accepted."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Half-bath values are accepted."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Listing Search. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used by the Apartments-backed provider."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used by the Apartments-backed provider."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set."
            },
            "lotSizeMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set."
            },
            "lotSizeMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set."
            },
            "yearBuiltMin": {
              "type": "integer",
              "minimum": 1800,
              "maximum": 2030,
              "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set."
            },
            "yearBuiltMax": {
              "type": "integer",
              "minimum": 1800,
              "maximum": 2030,
              "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set."
            },
            "amenities": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "pool",
                  "ac",
                  "waterfront",
                  "single-story",
                  "garage",
                  "basement",
                  "3d-tour"
                ],
                "description": "Amenities item filter for Real Estate Listing Search. Accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\". Constraints: accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\"."
              },
              "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields."
            },
            "searchUrls": {
              "type": "array",
              "maxItems": 3,
              "items": {
                "type": "string",
                "format": "uri",
                "description": "Search Urls item value for Real Estate Listing Search. Constraints: format: uri."
              },
              "description": "Listing or search URLs for url mode."
            },
            "addresses": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Addresses item value for Real Estate Listing Search."
              },
              "description": "Addresses for lookup mode."
            },
            "zpids": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Zpids item value for Real Estate Listing Search."
              },
              "description": "Zillow property ids for lookup mode."
            },
            "propertyIds": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Property Ids item value for Real Estate Listing Search."
              },
              "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider."
            },
            "locationSlug": {
              "type": "string",
              "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
            },
            "state": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2,
              "description": "Two-letter state hint for rental searches."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches."
            },
            "petFriendly": {
              "type": "boolean",
              "default": false,
              "description": "Rental search filter for pet-friendly listings."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered search pages for the Apartments-backed provider."
            },
            "filterToRequestedCity": {
              "type": "boolean",
              "description": "Optional exact-city filter for Apartments-backed city searches."
            },
            "includeSchools": {
              "type": "boolean",
              "default": true,
              "description": "Include school data where the selected provider supports detail extraction."
            },
            "includeHistory": {
              "type": "boolean",
              "default": true,
              "description": "Include price/tax history where the selected provider supports detail extraction."
            },
            "includeDetails": {
              "type": "boolean",
              "default": false,
              "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows."
            },
            "smartScrape": {
              "type": "boolean",
              "default": false,
              "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "source",
            "mode",
            "market",
            "listingType",
            "priceMin",
            "priceMax",
            "bedsMin",
            "bedsMax",
            "bathsMin",
            "bathsMax",
            "homeTypes",
            "propertyType",
            "bedrooms",
            "sortBy",
            "daysOnMarket",
            "sqftMin",
            "sqftMax",
            "lotSizeMin",
            "lotSizeMax",
            "yearBuiltMin",
            "yearBuiltMax",
            "amenities",
            "searchUrls",
            "addresses",
            "zpids",
            "propertyIds",
            "locationSlug",
            "state",
            "zipCode",
            "maxRent",
            "petFriendly",
            "maxPages",
            "filterToRequestedCity",
            "includeSchools",
            "includeHistory",
            "includeDetails",
            "smartScrape",
            "maxResults"
          ],
          "fields": [
            {
              "name": "source",
              "type": "string",
              "required": false,
              "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments.",
              "constraints": {
                "enum": [
                  "auto",
                  "zillow",
                  "apartments",
                  "realtor"
                ],
                "default": "auto"
              }
            },
            {
              "name": "mode",
              "type": "string",
              "required": false,
              "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids.",
              "constraints": {
                "enum": [
                  "search",
                  "url",
                  "lookup"
                ],
                "default": "search"
              }
            },
            {
              "name": "market",
              "type": "string",
              "required": false,
              "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
            },
            {
              "name": "listingType",
              "type": "string",
              "required": false,
              "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages.",
              "constraints": {
                "enum": [
                  "for_sale",
                  "recently_sold",
                  "for_rent",
                  "foreclosure"
                ],
                "default": "for_sale"
              }
            },
            {
              "name": "priceMin",
              "type": "integer",
              "required": false,
              "description": "Minimum listing price or monthly rent in USD.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "priceMax",
              "type": "integer",
              "required": false,
              "description": "Maximum listing price or monthly rent in USD.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "bedsMin",
              "type": "integer",
              "required": false,
              "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bedsMax",
              "type": "integer",
              "required": false,
              "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMin",
              "type": "number",
              "required": false,
              "description": "Minimum bathrooms. Half-bath values are accepted.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMax",
              "type": "number",
              "required": false,
              "description": "Maximum bathrooms. Half-bath values are accepted.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "homeTypes",
              "type": "array",
              "required": false,
              "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded.",
              "constraints": {
                "maxItems": 7
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "propertyType",
              "type": "string",
              "required": false,
              "description": "Rental property type used by the Apartments-backed provider.",
              "constraints": {
                "enum": [
                  "apartments",
                  "houses",
                  "townhomes",
                  "condos"
                ]
              }
            },
            {
              "name": "bedrooms",
              "type": "any",
              "required": false,
              "description": "Rental bedroom filter used by the Apartments-backed provider."
            },
            {
              "name": "sortBy",
              "type": "string",
              "required": false,
              "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters.",
              "constraints": {
                "enum": [
                  "newest",
                  "relevance",
                  "pricea",
                  "priced",
                  "beds",
                  "baths",
                  "size",
                  "lot",
                  "zest"
                ],
                "default": "newest"
              }
            },
            {
              "name": "daysOnMarket",
              "type": "string",
              "required": false,
              "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set.",
              "constraints": {
                "enum": [
                  "",
                  "1",
                  "7",
                  "14",
                  "30",
                  "90",
                  "6m",
                  "12m",
                  "24m",
                  "36m"
                ],
                "default": ""
              }
            },
            {
              "name": "sqftMin",
              "type": "integer",
              "required": false,
              "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "sqftMax",
              "type": "integer",
              "required": false,
              "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "lotSizeMin",
              "type": "integer",
              "required": false,
              "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "lotSizeMax",
              "type": "integer",
              "required": false,
              "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "yearBuiltMin",
              "type": "integer",
              "required": false,
              "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set.",
              "constraints": {
                "minimum": 1800,
                "maximum": 2030
              }
            },
            {
              "name": "yearBuiltMax",
              "type": "integer",
              "required": false,
              "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set.",
              "constraints": {
                "minimum": 1800,
                "maximum": 2030
              }
            },
            {
              "name": "amenities",
              "type": "array",
              "required": false,
              "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields.",
              "constraints": {
                "maxItems": 7
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "searchUrls",
              "type": "array",
              "required": false,
              "description": "Listing or search URLs for url mode.",
              "constraints": {
                "maxItems": 3
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "addresses",
              "type": "array",
              "required": false,
              "description": "Addresses for lookup mode.",
              "constraints": {
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "zpids",
              "type": "array",
              "required": false,
              "description": "Zillow property ids for lookup mode.",
              "constraints": {
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "propertyIds",
              "type": "array",
              "required": false,
              "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider.",
              "constraints": {
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "locationSlug",
              "type": "string",
              "required": false,
              "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
            },
            {
              "name": "state",
              "type": "string",
              "required": false,
              "description": "Two-letter state hint for rental searches.",
              "constraints": {
                "minLength": 2,
                "maxLength": 2
              }
            },
            {
              "name": "zipCode",
              "type": "string",
              "required": false,
              "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
            },
            {
              "name": "maxRent",
              "type": "integer",
              "required": false,
              "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "petFriendly",
              "type": "boolean",
              "required": false,
              "description": "Rental search filter for pet-friendly listings.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "maxPages",
              "type": "integer",
              "required": false,
              "description": "Maximum rendered search pages for the Apartments-backed provider.",
              "constraints": {
                "default": 1,
                "minimum": 1,
                "maximum": 2
              }
            },
            {
              "name": "filterToRequestedCity",
              "type": "boolean",
              "required": false,
              "description": "Optional exact-city filter for Apartments-backed city searches."
            },
            {
              "name": "includeSchools",
              "type": "boolean",
              "required": false,
              "description": "Include school data where the selected provider supports detail extraction.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeHistory",
              "type": "boolean",
              "required": false,
              "description": "Include price/tax history where the selected provider supports detail extraction.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeDetails",
              "type": "boolean",
              "required": false,
              "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "smartScrape",
              "type": "boolean",
              "required": false,
              "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "maxResults",
              "type": "integer",
              "required": false,
              "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 20
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "source": "zillow",
            "mode": "search",
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "listingType": "for_sale",
            "priceMin": 200000,
            "priceMax": 500000,
            "bedsMin": 3,
            "bedsMax": 4,
            "bathsMin": 2,
            "bathsMax": 4,
            "sqftMin": 1400,
            "sqftMax": 3000,
            "homeTypes": [
              "houses",
              "townhomes"
            ],
            "includeDetails": false,
            "maxResults": 10
          },
          "requirements": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned."
        },
        "exampleRequest": {
          "source": "zillow",
          "mode": "search",
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "priceMin": 200000,
          "priceMax": 500000,
          "bedsMin": 3,
          "bedsMax": 4,
          "bathsMin": 2,
          "bathsMax": 4,
          "sqftMin": 1400,
          "sqftMax": 3000,
          "homeTypes": [
            "houses",
            "townhomes"
          ],
          "includeDetails": false,
          "maxResults": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "result_count",
            "results",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "result_count": {
              "type": "integer"
            },
            "filter_summary": {
              "type": "object",
              "description": "Counts before and after AgentBodega rechecks the requested filters against normalized rows.",
              "properties": {
                "normalized_count": {
                  "type": "integer"
                },
                "matched_count": {
                  "type": "integer"
                },
                "returned_count": {
                  "type": "integer"
                },
                "excluded_count": {
                  "type": "integer"
                }
              },
              "additionalProperties": false
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "source",
                  "listing_id",
                  "address"
                ],
                "properties": {
                  "source": {
                    "type": "string",
                    "description": "Managed source class used to normalize the listing."
                  },
                  "listing_id": {
                    "type": "string"
                  },
                  "address": {
                    "type": "string"
                  },
                  "street": {
                    "type": "string"
                  },
                  "city": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  },
                  "postal_code": {
                    "type": "string"
                  },
                  "latitude": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "longitude": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "price_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "price_display": {
                    "type": "string"
                  },
                  "zestimate_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "rent_zestimate_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "tax_assessed_value_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "beds": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "baths": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "sqft": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "lot_sqft": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "year_built": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "home_type": {
                    "type": "string"
                  },
                  "listing_status": {
                    "type": "string"
                  },
                  "days_on_market": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "description": {
                    "type": "string"
                  },
                  "listing_url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "image_url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "photo_urls": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uri"
                    }
                  },
                  "agent": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "price_history": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "tax_history": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "warnings": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "additionalProperties": true
              }
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "result_count",
            "results",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "result_count": {
              "type": "integer"
            },
            "filter_summary": {
              "type": "object",
              "description": "Counts before and after AgentBodega rechecks the requested filters against normalized rows.",
              "properties": {
                "normalized_count": {
                  "type": "integer"
                },
                "matched_count": {
                  "type": "integer"
                },
                "returned_count": {
                  "type": "integer"
                },
                "excluded_count": {
                  "type": "integer"
                }
              },
              "additionalProperties": false
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "source",
                  "listing_id",
                  "address"
                ],
                "properties": {
                  "source": {
                    "type": "string",
                    "description": "Managed source class used to normalize the listing."
                  },
                  "listing_id": {
                    "type": "string"
                  },
                  "address": {
                    "type": "string"
                  },
                  "street": {
                    "type": "string"
                  },
                  "city": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  },
                  "postal_code": {
                    "type": "string"
                  },
                  "latitude": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "longitude": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "price_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "price_display": {
                    "type": "string"
                  },
                  "zestimate_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "rent_zestimate_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "tax_assessed_value_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "beds": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "baths": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "sqft": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "lot_sqft": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "year_built": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "home_type": {
                    "type": "string"
                  },
                  "listing_status": {
                    "type": "string"
                  },
                  "days_on_market": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "description": {
                    "type": "string"
                  },
                  "listing_url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "image_url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "photo_urls": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uri"
                    }
                  },
                  "agent": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "price_history": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "tax_history": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "warnings": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "additionalProperties": true
              }
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "real-estate-listings-search",
            "name": "Real Estate Listing Search",
            "department": "Real Estate"
          },
          "requested": {
            "source": "zillow",
            "mode": "search",
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "listingType": "for_sale",
            "filters": {
              "zipCode": "77008",
              "priceMin": 200000,
              "priceMax": 500000,
              "bedsMin": 3,
              "bedsMax": 4,
              "bathsMin": 2,
              "bathsMax": 4,
              "sqftMin": 1400,
              "sqftMax": 3000
            },
            "maxResults": 10,
            "includeDetails": false
          },
          "source": {
            "selected": "zillow",
            "routing": "managed-adapter",
            "resultFreshness": "live-run",
            "upstreamDetailsDisclosed": false
          },
          "result_count": 1,
          "filter_summary": {
            "normalized_count": 2,
            "matched_count": 1,
            "returned_count": 1,
            "excluded_count": 1
          },
          "results": [
            {
              "source": "zillow",
              "listing_id": "84007409",
              "address": "1328 W 23rd St Unit A, Houston, TX 77008",
              "price_usd": 450000,
              "beds": 3,
              "baths": 4,
              "sqft": 2043
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/real-estate/intelligence",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Real Estate Market Intelligence Report",
      "description": "Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.",
      "longDescription": "Purpose: Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nBest use: Use this when an agent needs turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nPrice: $0.75 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```",
      "category": "real-estate",
      "kind": "real-estate-report",
      "departmentId": "real-estate",
      "department": "Real Estate",
      "aisleId": "market-intelligence",
      "aisle": "Market Intelligence",
      "shelfId": "market-reports",
      "shelf": "Market Reports",
      "offeringId": "real-estate-market-intelligence",
      "offering": "Real Estate Market Intelligence Report",
      "pathIds": [
        "real-estate",
        "market-intelligence",
        "market-reports",
        "real-estate-market-intelligence"
      ],
      "pathLabels": [
        "Real Estate",
        "Market Intelligence",
        "Market Reports",
        "Real Estate Market Intelligence Report"
      ],
      "taxonomyPath": "real-estate.market-intelligence.market-reports.real-estate-market-intelligence",
      "layout": {
        "department": {
          "id": "real-estate",
          "name": "Real Estate"
        },
        "aisle": {
          "id": "market-intelligence",
          "name": "Market Intelligence"
        },
        "shelf": {
          "id": "market-reports",
          "name": "Market Reports"
        },
        "offering": {
          "id": "real-estate-market-intelligence",
          "name": "Real Estate Market Intelligence Report"
        },
        "pathIds": [
          "real-estate",
          "market-intelligence",
          "market-reports",
          "real-estate-market-intelligence"
        ],
        "pathLabels": [
          "Real Estate",
          "Market Intelligence",
          "Market Reports",
          "Real Estate Market Intelligence Report"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "real-estate",
        "market-intelligence",
        "market-report",
        "listing-analysis",
        "pricing-benchmarks",
        "price-bands",
        "decision-lenses",
        "value-shortlist",
        "housing",
        "for-sale",
        "for-rent",
        "public-data",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "750000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "750000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "anyOf": [
          {
            "required": [
              "market"
            ]
          },
          {
            "required": [
              "zipCode"
            ]
          }
        ],
        "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
        "properties": {
          "market": {
            "type": "string",
            "minLength": 2,
            "maxLength": 180,
            "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
          },
          "zipCode": {
            "type": "string",
            "pattern": "^\\d{5}$",
            "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
          },
          "listingType": {
            "type": "string",
            "enum": [
              "for_sale",
              "for_rent",
              "foreclosure"
            ],
            "default": "for_sale",
            "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
          },
          "objective": {
            "type": "string",
            "enum": [
              "balanced",
              "value",
              "low-price",
              "newest",
              "space"
            ],
            "default": "balanced",
            "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
          },
          "priceMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
          },
          "priceMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
          },
          "bedsMin": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
          },
          "bedsMax": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
          },
          "bathsMin": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
          },
          "bathsMax": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
          },
          "sqftMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
          },
          "sqftMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
          },
          "homeTypes": {
            "type": "array",
            "maxItems": 7,
            "items": {
              "type": "string",
              "enum": [
                "houses",
                "townhomes",
                "multifamily",
                "condos",
                "land",
                "apartments",
                "manufactured"
              ],
              "description": "Home Types item filter for Real Estate Market Intelligence Report. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
            },
            "description": "Optional home-type filters for home-sale searches."
          },
          "propertyType": {
            "type": "string",
            "enum": [
              "apartments",
              "houses",
              "townhomes",
              "condos"
            ],
            "description": "Rental property type used for apartment-market reports."
          },
          "bedrooms": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "any",
                  "studio",
                  "1",
                  "2",
                  "3",
                  "4",
                  "5+"
                ]
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 5
              }
            ],
            "description": "Rental bedroom filter used for apartment-market reports."
          },
          "maxRent": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "newest",
              "relevance",
              "pricea",
              "priced",
              "beds",
              "baths",
              "size",
              "lot",
              "zest"
            ],
            "default": "newest",
            "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
          },
          "daysOnMarket": {
            "type": "string",
            "enum": [
              "",
              "1",
              "7",
              "14",
              "30",
              "90",
              "6m",
              "12m",
              "24m",
              "36m"
            ],
            "default": "",
            "description": "Optional maximum listing-age bucket supported by home-sale searches."
          },
          "maxPages": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2,
            "default": 1,
            "description": "Maximum rendered result pages for apartment-market reports."
          },
          "maxListings": {
            "type": "integer",
            "minimum": 10,
            "maximum": 100,
            "default": 100,
            "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
          },
          "shortlistLimit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 15,
            "default": 10,
            "description": "Maximum ranked listings to include in the shortlist."
          },
          "includeMarkdown": {
            "type": "boolean",
            "default": true,
            "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "market",
          "zipCode",
          "listingType",
          "objective",
          "priceMin",
          "priceMax",
          "bedsMin",
          "bedsMax",
          "bathsMin",
          "bathsMax",
          "sqftMin",
          "sqftMax",
          "homeTypes",
          "propertyType",
          "bedrooms",
          "maxRent",
          "sortBy",
          "daysOnMarket",
          "maxPages",
          "maxListings",
          "shortlistLimit",
          "includeMarkdown"
        ],
        "fields": [
          {
            "name": "market",
            "type": "string",
            "required": false,
            "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
            "constraints": {
              "minLength": 2,
              "maxLength": 180
            }
          },
          {
            "name": "zipCode",
            "type": "string",
            "required": false,
            "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
          },
          {
            "name": "listingType",
            "type": "string",
            "required": false,
            "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
            "constraints": {
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale"
            }
          },
          {
            "name": "objective",
            "type": "string",
            "required": false,
            "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
            "constraints": {
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced"
            }
          },
          {
            "name": "priceMin",
            "type": "integer",
            "required": false,
            "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "priceMax",
            "type": "integer",
            "required": false,
            "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "bedsMin",
            "type": "integer",
            "required": false,
            "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bedsMax",
            "type": "integer",
            "required": false,
            "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMin",
            "type": "number",
            "required": false,
            "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMax",
            "type": "number",
            "required": false,
            "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "sqftMin",
            "type": "integer",
            "required": false,
            "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "sqftMax",
            "type": "integer",
            "required": false,
            "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "homeTypes",
            "type": "array",
            "required": false,
            "description": "Optional home-type filters for home-sale searches.",
            "constraints": {
              "maxItems": 7
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "propertyType",
            "type": "string",
            "required": false,
            "description": "Rental property type used for apartment-market reports.",
            "constraints": {
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ]
            }
          },
          {
            "name": "bedrooms",
            "type": "any",
            "required": false,
            "description": "Rental bedroom filter used for apartment-market reports."
          },
          {
            "name": "maxRent",
            "type": "integer",
            "required": false,
            "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "sortBy",
            "type": "string",
            "required": false,
            "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
            "constraints": {
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest"
            }
          },
          {
            "name": "daysOnMarket",
            "type": "string",
            "required": false,
            "description": "Optional maximum listing-age bucket supported by home-sale searches.",
            "constraints": {
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": ""
            }
          },
          {
            "name": "maxPages",
            "type": "integer",
            "required": false,
            "description": "Maximum rendered result pages for apartment-market reports.",
            "constraints": {
              "default": 1,
              "minimum": 1,
              "maximum": 2
            }
          },
          {
            "name": "maxListings",
            "type": "integer",
            "required": false,
            "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
            "constraints": {
              "default": 100,
              "minimum": 10,
              "maximum": 100
            }
          },
          {
            "name": "shortlistLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum ranked listings to include in the shortlist.",
            "constraints": {
              "default": 10,
              "minimum": 3,
              "maximum": 15
            }
          },
          {
            "name": "includeMarkdown",
            "type": "boolean",
            "required": false,
            "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "objective": "value",
          "priceMin": 200000,
          "priceMax": 750000,
          "bedsMin": 2,
          "bedsMax": 4,
          "bathsMin": 1.5,
          "bathsMax": 4,
          "sqftMin": 1000,
          "sqftMax": 3500,
          "maxListings": 100,
          "shortlistLimit": 10,
          "includeMarkdown": true
        },
        "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
      },
      "exampleRequest": {
        "market": "Houston, TX 77008",
        "zipCode": "77008",
        "listingType": "for_sale",
        "objective": "value",
        "priceMin": 200000,
        "priceMax": 750000,
        "bedsMin": 2,
        "bedsMax": 4,
        "bathsMin": 1.5,
        "bathsMax": 4,
        "sqftMin": 1000,
        "sqftMax": 3500,
        "maxListings": 100,
        "shortlistLimit": 10,
        "includeMarkdown": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "report",
          "listings",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True only when enough evidence was collected to deliver the report."
          },
          "tool": {
            "type": "object",
            "description": "AgentBodega product identity and department.",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "description": "Normalized report request and enforced limits.",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "description": "Source-neutral routing and freshness metadata.",
            "additionalProperties": true
          },
          "report": {
            "type": "object",
            "required": [
              "title",
              "executive_summary",
              "insights",
              "sample",
              "benchmarks",
              "price_bands",
              "market_positions",
              "market_signals",
              "segments",
              "decision_lenses",
              "shortlist",
              "outliers",
              "evidence_manifest",
              "data_quality",
              "methodology"
            ],
            "properties": {
              "title": {
                "type": "string"
              },
              "executive_summary": {
                "type": "string",
                "description": "Deterministic summary grounded in the returned sample metrics."
              },
              "insights": {
                "type": "array",
                "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                "items": {
                  "type": "string"
                }
              },
              "sample": {
                "type": "object",
                "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                "additionalProperties": true
              },
              "benchmarks": {
                "type": "object",
                "required": [
                  "list_price_usd",
                  "square_feet",
                  "price_per_sqft_usd",
                  "days_on_market",
                  "bedrooms"
                ],
                "properties": {
                  "list_price_usd": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "square_feet": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "price_per_sqft_usd": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "days_on_market": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "bedrooms": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              "price_bands": {
                "type": "object",
                "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                "additionalProperties": true
              },
              "market_positions": {
                "type": "object",
                "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                "additionalProperties": true
              },
              "market_signals": {
                "type": "object",
                "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                "additionalProperties": true
              },
              "segments": {
                "type": "object",
                "description": "Inventory groups by home type, postal code, and bedroom count.",
                "additionalProperties": true
              },
              "decision_lenses": {
                "type": "object",
                "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                "additionalProperties": true
              },
              "shortlist": {
                "type": "array",
                "description": "Listings ranked against the requested objective and the current report sample.",
                "items": {
                  "type": "object",
                  "required": [
                    "rank",
                    "score",
                    "listing_id",
                    "address",
                    "price_usd",
                    "reasons"
                  ],
                  "properties": {
                    "rank": {
                      "type": "integer"
                    },
                    "score": {
                      "type": "number"
                    },
                    "listing_id": {
                      "type": "string"
                    },
                    "address": {
                      "type": "string"
                    },
                    "listing_url": {
                      "type": "string"
                    },
                    "price_usd": {
                      "type": "number"
                    },
                    "beds": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "baths": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "sqft": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_per_sqft_usd": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "days_on_market": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_vs_market_pct": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_per_sqft_vs_market_pct": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "cohort": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Context against listings with the same normalized home type and bedroom count.",
                      "additionalProperties": true
                    },
                    "reasons": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "additionalProperties": true
                }
              },
              "outliers": {
                "type": "object",
                "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                "additionalProperties": true
              },
              "evidence_manifest": {
                "type": "object",
                "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                "additionalProperties": true
              },
              "data_quality": {
                "type": "object",
                "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                "additionalProperties": true
              },
              "methodology": {
                "type": "object",
                "description": "Transparent calculation and interpretation boundaries.",
                "additionalProperties": true
              },
              "markdown": {
                "type": "string",
                "description": "Optional ready-to-render report."
              }
            },
            "additionalProperties": true
          },
          "listings": {
            "type": "array",
            "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "real-estate-market-intelligence",
          "name": "Real Estate Market Intelligence Report",
          "department": "Real Estate"
        },
        "requested": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "filters": {
            "zipCode": "77008",
            "priceMin": 200000,
            "priceMax": 750000,
            "bedsMin": 2,
            "bedsMax": 4,
            "bathsMin": 1.5,
            "bathsMax": 4,
            "sqftMin": 1000,
            "sqftMax": 3500
          },
          "inventoryClass": "home-listings",
          "listingType": "for_sale",
          "objective": "value",
          "maxListings": 100,
          "shortlistLimit": 10,
          "evidenceScope": "shortlist-only",
          "includeMarkdown": true,
          "smartScrape": false
        },
        "source": {
          "selected": "managed-public-listings",
          "inventoryClass": "home-listings",
          "routing": "managed-adapter",
          "resultFreshness": "live-run",
          "upstreamDetailsDisclosed": false
        },
        "report": {
          "title": "Houston, TX 77008 Real Estate Market Intelligence",
          "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008. The sample median listing price is $525,000 and the median price per square foot is $248. The value shortlist ranks listings only against this current sample. Data confidence is high.",
          "insights": [
            "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000.",
            "11 of 39 listings with square-footage evidence sit below both sample medians."
          ],
          "sample": {
            "raw_count": 50,
            "duplicate_count": 3,
            "unique_count": 47,
            "eligible_count": 42,
            "excluded_count": 5
          },
          "benchmarks": {
            "list_price_usd": {
              "count": 42,
              "min": 239000,
              "p25": 389000,
              "median": 525000,
              "mean": 548120.24,
              "p75": 675000,
              "max": 750000
            },
            "square_feet": {
              "count": 39,
              "min": 960,
              "p25": 1480,
              "median": 1980,
              "mean": 2051.41,
              "p75": 2440,
              "max": 3890
            },
            "price_per_sqft_usd": {
              "count": 39,
              "min": 174.82,
              "p25": 215.6,
              "median": 248,
              "mean": 252.43,
              "p75": 284.7,
              "max": 342.91
            },
            "days_on_market": {
              "count": 31,
              "min": 1,
              "p25": 7,
              "median": 18,
              "mean": 27.42,
              "p75": 35,
              "max": 103
            },
            "bedrooms": {
              "count": 42,
              "min": 2,
              "p25": 3,
              "median": 3,
              "mean": 3.29,
              "p75": 4,
              "max": 6
            }
          },
          "price_bands": {
            "basis": "current sample list price quartiles",
            "observed_count": 42,
            "bands": [
              {
                "id": "under-p25",
                "label": "Lower quartile",
                "count": 11,
                "share_pct": 26.2,
                "lower_usd": null,
                "upper_usd": 389000
              }
            ]
          },
          "market_positions": {
            "basis": {
              "median_price_usd": 525000,
              "median_price_per_sqft_usd": 248
            },
            "observed_count": 39,
            "positions": [
              {
                "id": "relative-value",
                "label": "Below both medians",
                "count": 11,
                "share_pct": 28.2
              }
            ]
          },
          "market_signals": {
            "below_median_price": {
              "count": 21,
              "share_pct": 50
            },
            "below_both_price_medians": {
              "count": 11,
              "share_pct": 28.2,
              "observed_count": 39
            },
            "fresh_7_days_or_less": {
              "count": 8,
              "share_pct": 25.8,
              "observed_count": 31
            }
          },
          "segments": {
            "by_home_type": [
              {
                "label": "SINGLE_FAMILY",
                "count": 28,
                "median_price_usd": 549500,
                "median_price_per_sqft_usd": 251.2
              }
            ],
            "by_postal_code": [
              {
                "label": "77008",
                "count": 42,
                "median_price_usd": 525000,
                "median_price_per_sqft_usd": 248
              }
            ],
            "by_bedrooms": [
              {
                "label": "3 bedrooms",
                "count": 24,
                "median_price_usd": 510000,
                "median_price_per_sqft_usd": 246.5
              }
            ]
          },
          "decision_lenses": {
            "balanced": [
              {
                "rank": 1,
                "listing_id": "84007409",
                "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                "price_usd": 450000
              }
            ],
            "value": [
              {
                "rank": 1,
                "listing_id": "84007409",
                "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                "price_usd": 450000
              }
            ]
          },
          "shortlist": [
            {
              "rank": 1,
              "score": 94.2,
              "listing_id": "84007409",
              "address": "1328 W 23rd St Unit A, Houston, TX 77008",
              "listing_url": "https://example.com/listing/84007409",
              "price_usd": 450000,
              "beds": 3,
              "baths": 4,
              "sqft": 2043,
              "price_per_sqft_usd": 220.26,
              "days_on_market": 6,
              "price_vs_market_pct": -14.3,
              "price_per_sqft_vs_market_pct": -11.2,
              "reasons": [
                "14.3% below sample median price",
                "11.2% below sample median price per square foot"
              ]
            }
          ],
          "outliers": {
            "method": "1.5 x interquartile range review flags",
            "interpretation": "Review flags are not valuation claims.",
            "count": 0,
            "listings": []
          },
          "evidence_manifest": {
            "analyzed_listing_count": 42,
            "returned_listing_count": 0,
            "evidence_scope": "shortlist-only",
            "full_listing_rows_included": false,
            "shortlist_count": 10,
            "enforced_max_listing_cap": 100
          },
          "data_quality": {
            "confidence": "high",
            "coverage": {
              "price_pct": 100,
              "address_pct": 100,
              "listing_url_pct": 100,
              "square_feet_pct": 92.9,
              "price_per_sqft_pct": 92.9,
              "days_on_market_pct": 73.8,
              "bedrooms_pct": 100
            },
            "warnings": [
              "Public listing inventory can change after this snapshot and may not include every listing in the market."
            ],
            "limitations": [
              "Current public listing sample, not full MLS coverage."
            ]
          },
          "methodology": {
            "calculation": "Deterministic descriptive statistics with interpolated quartiles and relative within-sample ranking.",
            "ranking_objective": "value",
            "minimum_usable_listings": 5,
            "historical_trends_included": false,
            "appraisal_or_investment_advice": false
          },
          "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nAnalyzed 42 unique current listings."
        },
        "listings": [],
        "checkedAt": "2026-07-14T00:00:00.000Z"
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "objective": "value",
                "priceMin": 200000,
                "priceMax": 750000,
                "bedsMin": 2,
                "bedsMax": 4,
                "bathsMin": 1.5,
                "bathsMax": 4,
                "sqftMin": 1000,
                "sqftMax": 3500,
                "maxListings": 100,
                "shortlistLimit": 10,
                "includeMarkdown": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "real-estate-market-intelligence",
                  "name": "Real Estate Market Intelligence Report",
                  "department": "Real Estate"
                },
                "requested": {
                  "market": "Houston, TX 77008",
                  "zipCode": "77008",
                  "filters": {
                    "zipCode": "77008",
                    "priceMin": 200000,
                    "priceMax": 750000,
                    "bedsMin": 2,
                    "bedsMax": 4,
                    "bathsMin": 1.5,
                    "bathsMax": 4,
                    "sqftMin": 1000,
                    "sqftMax": 3500
                  },
                  "inventoryClass": "home-listings",
                  "listingType": "for_sale",
                  "objective": "value",
                  "maxListings": 100,
                  "shortlistLimit": 10,
                  "evidenceScope": "shortlist-only",
                  "includeMarkdown": true,
                  "smartScrape": false
                },
                "source": {
                  "selected": "managed-public-listings",
                  "inventoryClass": "home-listings",
                  "routing": "managed-adapter",
                  "resultFreshness": "live-run",
                  "upstreamDetailsDisclosed": false
                },
                "report": {
                  "title": "Houston, TX 77008 Real Estate Market Intelligence",
                  "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008. The sample median listing price is $525,000 and the median price per square foot is $248. The value shortlist ranks listings only against this current sample. Data confidence is high.",
                  "insights": [
                    "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000.",
                    "11 of 39 listings with square-footage evidence sit below both sample medians."
                  ],
                  "sample": {
                    "raw_count": 50,
                    "duplicate_count": 3,
                    "unique_count": 47,
                    "eligible_count": 42,
                    "excluded_count": 5
                  },
                  "benchmarks": {
                    "list_price_usd": {
                      "count": 42,
                      "min": 239000,
                      "p25": 389000,
                      "median": 525000,
                      "mean": 548120.24,
                      "p75": 675000,
                      "max": 750000
                    },
                    "square_feet": {
                      "count": 39,
                      "min": 960,
                      "p25": 1480,
                      "median": 1980,
                      "mean": 2051.41,
                      "p75": 2440,
                      "max": 3890
                    },
                    "price_per_sqft_usd": {
                      "count": 39,
                      "min": 174.82,
                      "p25": 215.6,
                      "median": 248,
                      "mean": 252.43,
                      "p75": 284.7,
                      "max": 342.91
                    },
                    "days_on_market": {
                      "count": 31,
                      "min": 1,
                      "p25": 7,
                      "median": 18,
                      "mean": 27.42,
                      "p75": 35,
                      "max": 103
                    },
                    "bedrooms": {
                      "count": 42,
                      "min": 2,
                      "p25": 3,
                      "median": 3,
                      "mean": 3.29,
                      "p75": 4,
                      "max": 6
                    }
                  },
                  "price_bands": {
                    "basis": "current sample list price quartiles",
                    "observed_count": 42,
                    "bands": [
                      {
                        "id": "under-p25",
                        "label": "Lower quartile",
                        "count": 11,
                        "share_pct": 26.2,
                        "lower_usd": null,
                        "upper_usd": 389000
                      }
                    ]
                  },
                  "market_positions": {
                    "basis": {
                      "median_price_usd": 525000,
                      "median_price_per_sqft_usd": 248
                    },
                    "observed_count": 39,
                    "positions": [
                      {
                        "id": "relative-value",
                        "label": "Below both medians",
                        "count": 11,
                        "share_pct": 28.2
                      }
                    ]
                  },
                  "market_signals": {
                    "below_median_price": {
                      "count": 21,
                      "share_pct": 50
                    },
                    "below_both_price_medians": {
                      "count": 11,
                      "share_pct": 28.2,
                      "observed_count": 39
                    },
                    "fresh_7_days_or_less": {
                      "count": 8,
                      "share_pct": 25.8,
                      "observed_count": 31
                    }
                  },
                  "segments": {
                    "by_home_type": [
                      {
                        "label": "SINGLE_FAMILY",
                        "count": 28,
                        "median_price_usd": 549500,
                        "median_price_per_sqft_usd": 251.2
                      }
                    ],
                    "by_postal_code": [
                      {
                        "label": "77008",
                        "count": 42,
                        "median_price_usd": 525000,
                        "median_price_per_sqft_usd": 248
                      }
                    ],
                    "by_bedrooms": [
                      {
                        "label": "3 bedrooms",
                        "count": 24,
                        "median_price_usd": 510000,
                        "median_price_per_sqft_usd": 246.5
                      }
                    ]
                  },
                  "decision_lenses": {
                    "balanced": [
                      {
                        "rank": 1,
                        "listing_id": "84007409",
                        "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                        "price_usd": 450000
                      }
                    ],
                    "value": [
                      {
                        "rank": 1,
                        "listing_id": "84007409",
                        "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                        "price_usd": 450000
                      }
                    ]
                  },
                  "shortlist": [
                    {
                      "rank": 1,
                      "score": 94.2,
                      "listing_id": "84007409",
                      "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                      "listing_url": "https://example.com/listing/84007409",
                      "price_usd": 450000,
                      "beds": 3,
                      "baths": 4,
                      "sqft": 2043,
                      "price_per_sqft_usd": 220.26,
                      "days_on_market": 6,
                      "price_vs_market_pct": -14.3,
                      "price_per_sqft_vs_market_pct": -11.2,
                      "reasons": [
                        "14.3% below sample median price",
                        "11.2% below sample median price per square foot"
                      ]
                    }
                  ],
                  "outliers": {
                    "method": "1.5 x interquartile range review flags",
                    "interpretation": "Review flags are not valuation claims.",
                    "count": 0,
                    "listings": []
                  },
                  "evidence_manifest": {
                    "analyzed_listing_count": 42,
                    "returned_listing_count": 0,
                    "evidence_scope": "shortlist-only",
                    "full_listing_rows_included": false,
                    "shortlist_count": 10,
                    "enforced_max_listing_cap": 100
                  },
                  "data_quality": {
                    "confidence": "high",
                    "coverage": {
                      "price_pct": 100,
                      "address_pct": 100,
                      "listing_url_pct": 100,
                      "square_feet_pct": 92.9,
                      "price_per_sqft_pct": 92.9,
                      "days_on_market_pct": 73.8,
                      "bedrooms_pct": 100
                    },
                    "warnings": [
                      "Public listing inventory can change after this snapshot and may not include every listing in the market."
                    ],
                    "limitations": [
                      "Current public listing sample, not full MLS coverage."
                    ]
                  },
                  "methodology": {
                    "calculation": "Deterministic descriptive statistics with interpolated quartiles and relative within-sample ranking.",
                    "ranking_objective": "value",
                    "minimum_usable_listings": 5,
                    "historical_trends_included": false,
                    "appraisal_or_investment_advice": false
                  },
                  "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nAnalyzed 42 unique current listings."
                },
                "listings": [],
                "checkedAt": "2026-07-14T00:00:00.000Z"
              }
            }
          },
          "routeTemplate": "/api/real-estate/intelligence",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "anyOf": [
                      {
                        "required": [
                          "market"
                        ]
                      },
                      {
                        "required": [
                          "zipCode"
                        ]
                      }
                    ],
                    "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
                    "properties": {
                      "market": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 180,
                        "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
                      },
                      "zipCode": {
                        "type": "string",
                        "pattern": "^\\d{5}$",
                        "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                      },
                      "listingType": {
                        "type": "string",
                        "enum": [
                          "for_sale",
                          "for_rent",
                          "foreclosure"
                        ],
                        "default": "for_sale",
                        "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
                      },
                      "objective": {
                        "type": "string",
                        "enum": [
                          "balanced",
                          "value",
                          "low-price",
                          "newest",
                          "space"
                        ],
                        "default": "balanced",
                        "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
                      },
                      "priceMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
                      },
                      "priceMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
                      },
                      "bedsMin": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                      },
                      "bedsMax": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                      },
                      "bathsMin": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                      },
                      "bathsMax": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                      },
                      "sqftMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                      },
                      "sqftMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                      },
                      "homeTypes": {
                        "type": "array",
                        "maxItems": 7,
                        "items": {
                          "type": "string",
                          "enum": [
                            "houses",
                            "townhomes",
                            "multifamily",
                            "condos",
                            "land",
                            "apartments",
                            "manufactured"
                          ],
                          "description": "Home Types item filter for Real Estate Market Intelligence Report. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                        },
                        "description": "Optional home-type filters for home-sale searches."
                      },
                      "propertyType": {
                        "type": "string",
                        "enum": [
                          "apartments",
                          "houses",
                          "townhomes",
                          "condos"
                        ],
                        "description": "Rental property type used for apartment-market reports."
                      },
                      "bedrooms": {
                        "oneOf": [
                          {
                            "type": "string",
                            "enum": [
                              "any",
                              "studio",
                              "1",
                              "2",
                              "3",
                              "4",
                              "5+"
                            ]
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 5
                          }
                        ],
                        "description": "Rental bedroom filter used for apartment-market reports."
                      },
                      "maxRent": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
                      },
                      "sortBy": {
                        "type": "string",
                        "enum": [
                          "newest",
                          "relevance",
                          "pricea",
                          "priced",
                          "beds",
                          "baths",
                          "size",
                          "lot",
                          "zest"
                        ],
                        "default": "newest",
                        "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
                      },
                      "daysOnMarket": {
                        "type": "string",
                        "enum": [
                          "",
                          "1",
                          "7",
                          "14",
                          "30",
                          "90",
                          "6m",
                          "12m",
                          "24m",
                          "36m"
                        ],
                        "default": "",
                        "description": "Optional maximum listing-age bucket supported by home-sale searches."
                      },
                      "maxPages": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 2,
                        "default": 1,
                        "description": "Maximum rendered result pages for apartment-market reports."
                      },
                      "maxListings": {
                        "type": "integer",
                        "minimum": 10,
                        "maximum": 100,
                        "default": 100,
                        "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
                      },
                      "shortlistLimit": {
                        "type": "integer",
                        "minimum": 3,
                        "maximum": 15,
                        "default": 10,
                        "description": "Maximum ranked listings to include in the shortlist."
                      },
                      "includeMarkdown": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "report",
                      "listings",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True only when enough evidence was collected to deliver the report."
                      },
                      "tool": {
                        "type": "object",
                        "description": "AgentBodega product identity and department.",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "description": "Normalized report request and enforced limits.",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "description": "Source-neutral routing and freshness metadata.",
                        "additionalProperties": true
                      },
                      "report": {
                        "type": "object",
                        "required": [
                          "title",
                          "executive_summary",
                          "insights",
                          "sample",
                          "benchmarks",
                          "price_bands",
                          "market_positions",
                          "market_signals",
                          "segments",
                          "decision_lenses",
                          "shortlist",
                          "outliers",
                          "evidence_manifest",
                          "data_quality",
                          "methodology"
                        ],
                        "properties": {
                          "title": {
                            "type": "string"
                          },
                          "executive_summary": {
                            "type": "string",
                            "description": "Deterministic summary grounded in the returned sample metrics."
                          },
                          "insights": {
                            "type": "array",
                            "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                            "items": {
                              "type": "string"
                            }
                          },
                          "sample": {
                            "type": "object",
                            "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                            "additionalProperties": true
                          },
                          "benchmarks": {
                            "type": "object",
                            "required": [
                              "list_price_usd",
                              "square_feet",
                              "price_per_sqft_usd",
                              "days_on_market",
                              "bedrooms"
                            ],
                            "properties": {
                              "list_price_usd": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "square_feet": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "price_per_sqft_usd": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "days_on_market": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "bedrooms": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              }
                            },
                            "additionalProperties": false
                          },
                          "price_bands": {
                            "type": "object",
                            "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                            "additionalProperties": true
                          },
                          "market_positions": {
                            "type": "object",
                            "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                            "additionalProperties": true
                          },
                          "market_signals": {
                            "type": "object",
                            "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                            "additionalProperties": true
                          },
                          "segments": {
                            "type": "object",
                            "description": "Inventory groups by home type, postal code, and bedroom count.",
                            "additionalProperties": true
                          },
                          "decision_lenses": {
                            "type": "object",
                            "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                            "additionalProperties": true
                          },
                          "shortlist": {
                            "type": "array",
                            "description": "Listings ranked against the requested objective and the current report sample.",
                            "items": {
                              "type": "object",
                              "required": [
                                "rank",
                                "score",
                                "listing_id",
                                "address",
                                "price_usd",
                                "reasons"
                              ],
                              "properties": {
                                "rank": {
                                  "type": "integer"
                                },
                                "score": {
                                  "type": "number"
                                },
                                "listing_id": {
                                  "type": "string"
                                },
                                "address": {
                                  "type": "string"
                                },
                                "listing_url": {
                                  "type": "string"
                                },
                                "price_usd": {
                                  "type": "number"
                                },
                                "beds": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "baths": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "sqft": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_per_sqft_usd": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "days_on_market": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_vs_market_pct": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_per_sqft_vs_market_pct": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "cohort": {
                                  "type": [
                                    "object",
                                    "null"
                                  ],
                                  "description": "Context against listings with the same normalized home type and bedroom count.",
                                  "additionalProperties": true
                                },
                                "reasons": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              },
                              "additionalProperties": true
                            }
                          },
                          "outliers": {
                            "type": "object",
                            "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                            "additionalProperties": true
                          },
                          "evidence_manifest": {
                            "type": "object",
                            "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                            "additionalProperties": true
                          },
                          "data_quality": {
                            "type": "object",
                            "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                            "additionalProperties": true
                          },
                          "methodology": {
                            "type": "object",
                            "description": "Transparent calculation and interpretation boundaries.",
                            "additionalProperties": true
                          },
                          "markdown": {
                            "type": "string",
                            "description": "Optional ready-to-render report."
                          }
                        },
                        "additionalProperties": true
                      },
                      "listings": {
                        "type": "array",
                        "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "real-estate-market-intelligence",
            "url": "https://agentbodega.store/api/real-estate/intelligence",
            "method": "POST",
            "description": "Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.",
            "longDescription": "Purpose: Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nBest use: Use this when an agent needs turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nPrice: $0.75 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Real Estate Market Intelligence Report",
            "category": "real-estate",
            "kind": "real-estate-report",
            "tags": [
              "real-estate",
              "market-intelligence",
              "market-report",
              "listing-analysis",
              "pricing-benchmarks",
              "price-bands",
              "decision-lenses",
              "value-shortlist",
              "housing",
              "for-sale",
              "for-rent",
              "public-data",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "market",
                "zipCode",
                "listingType",
                "objective",
                "priceMin",
                "priceMax",
                "bedsMin",
                "bedsMax",
                "bathsMin",
                "bathsMax",
                "sqftMin",
                "sqftMax",
                "homeTypes",
                "propertyType",
                "bedrooms",
                "maxRent",
                "sortBy",
                "daysOnMarket",
                "maxPages",
                "maxListings",
                "shortlistLimit",
                "includeMarkdown"
              ],
              "fields": [
                {
                  "name": "market",
                  "type": "string",
                  "required": false,
                  "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 180
                  }
                },
                {
                  "name": "zipCode",
                  "type": "string",
                  "required": false,
                  "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                },
                {
                  "name": "listingType",
                  "type": "string",
                  "required": false,
                  "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
                  "constraints": {
                    "enum": [
                      "for_sale",
                      "for_rent",
                      "foreclosure"
                    ],
                    "default": "for_sale"
                  }
                },
                {
                  "name": "objective",
                  "type": "string",
                  "required": false,
                  "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
                  "constraints": {
                    "enum": [
                      "balanced",
                      "value",
                      "low-price",
                      "newest",
                      "space"
                    ],
                    "default": "balanced"
                  }
                },
                {
                  "name": "priceMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "priceMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "bedsMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bedsMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMin",
                  "type": "number",
                  "required": false,
                  "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMax",
                  "type": "number",
                  "required": false,
                  "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "sqftMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "sqftMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "homeTypes",
                  "type": "array",
                  "required": false,
                  "description": "Optional home-type filters for home-sale searches.",
                  "constraints": {
                    "maxItems": 7
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "propertyType",
                  "type": "string",
                  "required": false,
                  "description": "Rental property type used for apartment-market reports.",
                  "constraints": {
                    "enum": [
                      "apartments",
                      "houses",
                      "townhomes",
                      "condos"
                    ]
                  }
                },
                {
                  "name": "bedrooms",
                  "type": "any",
                  "required": false,
                  "description": "Rental bedroom filter used for apartment-market reports."
                },
                {
                  "name": "maxRent",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "sortBy",
                  "type": "string",
                  "required": false,
                  "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
                  "constraints": {
                    "enum": [
                      "newest",
                      "relevance",
                      "pricea",
                      "priced",
                      "beds",
                      "baths",
                      "size",
                      "lot",
                      "zest"
                    ],
                    "default": "newest"
                  }
                },
                {
                  "name": "daysOnMarket",
                  "type": "string",
                  "required": false,
                  "description": "Optional maximum listing-age bucket supported by home-sale searches.",
                  "constraints": {
                    "enum": [
                      "",
                      "1",
                      "7",
                      "14",
                      "30",
                      "90",
                      "6m",
                      "12m",
                      "24m",
                      "36m"
                    ],
                    "default": ""
                  }
                },
                {
                  "name": "maxPages",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum rendered result pages for apartment-market reports.",
                  "constraints": {
                    "default": 1,
                    "minimum": 1,
                    "maximum": 2
                  }
                },
                {
                  "name": "maxListings",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
                  "constraints": {
                    "default": 100,
                    "minimum": 10,
                    "maximum": 100
                  }
                },
                {
                  "name": "shortlistLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum ranked listings to include in the shortlist.",
                  "constraints": {
                    "default": 10,
                    "minimum": 3,
                    "maximum": 15
                  }
                },
                {
                  "name": "includeMarkdown",
                  "type": "boolean",
                  "required": false,
                  "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "objective": "value",
                "priceMin": 200000,
                "priceMax": 750000,
                "bedsMin": 2,
                "bedsMax": 4,
                "bathsMin": 1.5,
                "bathsMax": 4,
                "sqftMin": 1000,
                "sqftMax": 3500,
                "maxListings": 100,
                "shortlistLimit": 10,
                "includeMarkdown": true
              },
              "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
            },
            "inputSchema": {
              "type": "object",
              "anyOf": [
                {
                  "required": [
                    "market"
                  ]
                },
                {
                  "required": [
                    "zipCode"
                  ]
                }
              ],
              "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
              "properties": {
                "market": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 180,
                  "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
                },
                "zipCode": {
                  "type": "string",
                  "pattern": "^\\d{5}$",
                  "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                },
                "listingType": {
                  "type": "string",
                  "enum": [
                    "for_sale",
                    "for_rent",
                    "foreclosure"
                  ],
                  "default": "for_sale",
                  "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
                },
                "objective": {
                  "type": "string",
                  "enum": [
                    "balanced",
                    "value",
                    "low-price",
                    "newest",
                    "space"
                  ],
                  "default": "balanced",
                  "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
                },
                "priceMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
                },
                "priceMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
                },
                "bedsMin": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                },
                "bedsMax": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                },
                "bathsMin": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                },
                "bathsMax": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                },
                "sqftMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                },
                "sqftMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                },
                "homeTypes": {
                  "type": "array",
                  "maxItems": 7,
                  "items": {
                    "type": "string",
                    "enum": [
                      "houses",
                      "townhomes",
                      "multifamily",
                      "condos",
                      "land",
                      "apartments",
                      "manufactured"
                    ],
                    "description": "Home Types item filter for Real Estate Market Intelligence Report. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                  },
                  "description": "Optional home-type filters for home-sale searches."
                },
                "propertyType": {
                  "type": "string",
                  "enum": [
                    "apartments",
                    "houses",
                    "townhomes",
                    "condos"
                  ],
                  "description": "Rental property type used for apartment-market reports."
                },
                "bedrooms": {
                  "oneOf": [
                    {
                      "type": "string",
                      "enum": [
                        "any",
                        "studio",
                        "1",
                        "2",
                        "3",
                        "4",
                        "5+"
                      ]
                    },
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 5
                    }
                  ],
                  "description": "Rental bedroom filter used for apartment-market reports."
                },
                "maxRent": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
                },
                "sortBy": {
                  "type": "string",
                  "enum": [
                    "newest",
                    "relevance",
                    "pricea",
                    "priced",
                    "beds",
                    "baths",
                    "size",
                    "lot",
                    "zest"
                  ],
                  "default": "newest",
                  "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
                },
                "daysOnMarket": {
                  "type": "string",
                  "enum": [
                    "",
                    "1",
                    "7",
                    "14",
                    "30",
                    "90",
                    "6m",
                    "12m",
                    "24m",
                    "36m"
                  ],
                  "default": "",
                  "description": "Optional maximum listing-age bucket supported by home-sale searches."
                },
                "maxPages": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 2,
                  "default": 1,
                  "description": "Maximum rendered result pages for apartment-market reports."
                },
                "maxListings": {
                  "type": "integer",
                  "minimum": 10,
                  "maximum": 100,
                  "default": 100,
                  "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
                },
                "shortlistLimit": {
                  "type": "integer",
                  "minimum": 3,
                  "maximum": 15,
                  "default": 10,
                  "description": "Maximum ranked listings to include in the shortlist."
                },
                "includeMarkdown": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "report",
                "listings",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True only when enough evidence was collected to deliver the report."
                },
                "tool": {
                  "type": "object",
                  "description": "AgentBodega product identity and department.",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "description": "Normalized report request and enforced limits.",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "description": "Source-neutral routing and freshness metadata.",
                  "additionalProperties": true
                },
                "report": {
                  "type": "object",
                  "required": [
                    "title",
                    "executive_summary",
                    "insights",
                    "sample",
                    "benchmarks",
                    "price_bands",
                    "market_positions",
                    "market_signals",
                    "segments",
                    "decision_lenses",
                    "shortlist",
                    "outliers",
                    "evidence_manifest",
                    "data_quality",
                    "methodology"
                  ],
                  "properties": {
                    "title": {
                      "type": "string"
                    },
                    "executive_summary": {
                      "type": "string",
                      "description": "Deterministic summary grounded in the returned sample metrics."
                    },
                    "insights": {
                      "type": "array",
                      "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                      "items": {
                        "type": "string"
                      }
                    },
                    "sample": {
                      "type": "object",
                      "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                      "additionalProperties": true
                    },
                    "benchmarks": {
                      "type": "object",
                      "required": [
                        "list_price_usd",
                        "square_feet",
                        "price_per_sqft_usd",
                        "days_on_market",
                        "bedrooms"
                      ],
                      "properties": {
                        "list_price_usd": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "square_feet": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "price_per_sqft_usd": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "days_on_market": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "bedrooms": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_bands": {
                      "type": "object",
                      "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                      "additionalProperties": true
                    },
                    "market_positions": {
                      "type": "object",
                      "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                      "additionalProperties": true
                    },
                    "market_signals": {
                      "type": "object",
                      "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                      "additionalProperties": true
                    },
                    "segments": {
                      "type": "object",
                      "description": "Inventory groups by home type, postal code, and bedroom count.",
                      "additionalProperties": true
                    },
                    "decision_lenses": {
                      "type": "object",
                      "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                      "additionalProperties": true
                    },
                    "shortlist": {
                      "type": "array",
                      "description": "Listings ranked against the requested objective and the current report sample.",
                      "items": {
                        "type": "object",
                        "required": [
                          "rank",
                          "score",
                          "listing_id",
                          "address",
                          "price_usd",
                          "reasons"
                        ],
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "score": {
                            "type": "number"
                          },
                          "listing_id": {
                            "type": "string"
                          },
                          "address": {
                            "type": "string"
                          },
                          "listing_url": {
                            "type": "string"
                          },
                          "price_usd": {
                            "type": "number"
                          },
                          "beds": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "baths": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "sqft": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_per_sqft_usd": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "days_on_market": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_vs_market_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_per_sqft_vs_market_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "cohort": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Context against listings with the same normalized home type and bedroom count.",
                            "additionalProperties": true
                          },
                          "reasons": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "outliers": {
                      "type": "object",
                      "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                      "additionalProperties": true
                    },
                    "evidence_manifest": {
                      "type": "object",
                      "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                      "additionalProperties": true
                    },
                    "data_quality": {
                      "type": "object",
                      "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                      "additionalProperties": true
                    },
                    "methodology": {
                      "type": "object",
                      "description": "Transparent calculation and interpretation boundaries.",
                      "additionalProperties": true
                    },
                    "markdown": {
                      "type": "string",
                      "description": "Optional ready-to-render report."
                    }
                  },
                  "additionalProperties": true
                },
                "listings": {
                  "type": "array",
                  "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.75"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.75",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/real-estate/intelligence",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.75"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/real-estate/intelligence",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "real-estate",
        "kind": "real-estate-report",
        "taxonomy": {
          "departmentId": "real-estate",
          "department": "Real Estate",
          "aisleId": "market-intelligence",
          "aisle": "Market Intelligence",
          "shelfId": "market-reports",
          "shelf": "Market Reports",
          "offeringId": "real-estate-market-intelligence",
          "offering": "Real Estate Market Intelligence Report",
          "pathIds": [
            "real-estate",
            "market-intelligence",
            "market-reports",
            "real-estate-market-intelligence"
          ],
          "pathLabels": [
            "Real Estate",
            "Market Intelligence",
            "Market Reports",
            "Real Estate Market Intelligence Report"
          ],
          "taxonomyPath": "real-estate.market-intelligence.market-reports.real-estate-market-intelligence",
          "layout": {
            "department": {
              "id": "real-estate",
              "name": "Real Estate"
            },
            "aisle": {
              "id": "market-intelligence",
              "name": "Market Intelligence"
            },
            "shelf": {
              "id": "market-reports",
              "name": "Market Reports"
            },
            "offering": {
              "id": "real-estate-market-intelligence",
              "name": "Real Estate Market Intelligence Report"
            },
            "pathIds": [
              "real-estate",
              "market-intelligence",
              "market-reports",
              "real-estate-market-intelligence"
            ],
            "pathLabels": [
              "Real Estate",
              "Market Intelligence",
              "Market Reports",
              "Real Estate Market Intelligence Report"
            ]
          }
        },
        "description": {
          "short": "Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.",
          "full": "Purpose: Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nBest use: Use this when an agent needs turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nPrice: $0.75 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "market"
              ]
            },
            {
              "required": [
                "zipCode"
              ]
            }
          ],
          "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
          "properties": {
            "market": {
              "type": "string",
              "minLength": 2,
              "maxLength": 180,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
            },
            "objective": {
              "type": "string",
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced",
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Market Intelligence Report. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Optional home-type filters for home-sale searches."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used for apartment-market reports."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Optional maximum listing-age bucket supported by home-sale searches."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered result pages for apartment-market reports."
            },
            "maxListings": {
              "type": "integer",
              "minimum": 10,
              "maximum": 100,
              "default": 100,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
            },
            "shortlistLimit": {
              "type": "integer",
              "minimum": 3,
              "maximum": 15,
              "default": 10,
              "description": "Maximum ranked listings to include in the shortlist."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "market"
              ]
            },
            {
              "required": [
                "zipCode"
              ]
            }
          ],
          "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
          "properties": {
            "market": {
              "type": "string",
              "minLength": 2,
              "maxLength": 180,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
            },
            "objective": {
              "type": "string",
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced",
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Market Intelligence Report. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Optional home-type filters for home-sale searches."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used for apartment-market reports."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Optional maximum listing-age bucket supported by home-sale searches."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered result pages for apartment-market reports."
            },
            "maxListings": {
              "type": "integer",
              "minimum": 10,
              "maximum": 100,
              "default": 100,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
            },
            "shortlistLimit": {
              "type": "integer",
              "minimum": 3,
              "maximum": 15,
              "default": 10,
              "description": "Maximum ranked listings to include in the shortlist."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "market",
            "zipCode",
            "listingType",
            "objective",
            "priceMin",
            "priceMax",
            "bedsMin",
            "bedsMax",
            "bathsMin",
            "bathsMax",
            "sqftMin",
            "sqftMax",
            "homeTypes",
            "propertyType",
            "bedrooms",
            "maxRent",
            "sortBy",
            "daysOnMarket",
            "maxPages",
            "maxListings",
            "shortlistLimit",
            "includeMarkdown"
          ],
          "fields": [
            {
              "name": "market",
              "type": "string",
              "required": false,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
              "constraints": {
                "minLength": 2,
                "maxLength": 180
              }
            },
            {
              "name": "zipCode",
              "type": "string",
              "required": false,
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            {
              "name": "listingType",
              "type": "string",
              "required": false,
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
              "constraints": {
                "enum": [
                  "for_sale",
                  "for_rent",
                  "foreclosure"
                ],
                "default": "for_sale"
              }
            },
            {
              "name": "objective",
              "type": "string",
              "required": false,
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
              "constraints": {
                "enum": [
                  "balanced",
                  "value",
                  "low-price",
                  "newest",
                  "space"
                ],
                "default": "balanced"
              }
            },
            {
              "name": "priceMin",
              "type": "integer",
              "required": false,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "priceMax",
              "type": "integer",
              "required": false,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "bedsMin",
              "type": "integer",
              "required": false,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bedsMax",
              "type": "integer",
              "required": false,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMin",
              "type": "number",
              "required": false,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMax",
              "type": "number",
              "required": false,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "sqftMin",
              "type": "integer",
              "required": false,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "sqftMax",
              "type": "integer",
              "required": false,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "homeTypes",
              "type": "array",
              "required": false,
              "description": "Optional home-type filters for home-sale searches.",
              "constraints": {
                "maxItems": 7
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "propertyType",
              "type": "string",
              "required": false,
              "description": "Rental property type used for apartment-market reports.",
              "constraints": {
                "enum": [
                  "apartments",
                  "houses",
                  "townhomes",
                  "condos"
                ]
              }
            },
            {
              "name": "bedrooms",
              "type": "any",
              "required": false,
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            {
              "name": "maxRent",
              "type": "integer",
              "required": false,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "sortBy",
              "type": "string",
              "required": false,
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
              "constraints": {
                "enum": [
                  "newest",
                  "relevance",
                  "pricea",
                  "priced",
                  "beds",
                  "baths",
                  "size",
                  "lot",
                  "zest"
                ],
                "default": "newest"
              }
            },
            {
              "name": "daysOnMarket",
              "type": "string",
              "required": false,
              "description": "Optional maximum listing-age bucket supported by home-sale searches.",
              "constraints": {
                "enum": [
                  "",
                  "1",
                  "7",
                  "14",
                  "30",
                  "90",
                  "6m",
                  "12m",
                  "24m",
                  "36m"
                ],
                "default": ""
              }
            },
            {
              "name": "maxPages",
              "type": "integer",
              "required": false,
              "description": "Maximum rendered result pages for apartment-market reports.",
              "constraints": {
                "default": 1,
                "minimum": 1,
                "maximum": 2
              }
            },
            {
              "name": "maxListings",
              "type": "integer",
              "required": false,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
              "constraints": {
                "default": 100,
                "minimum": 10,
                "maximum": 100
              }
            },
            {
              "name": "shortlistLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum ranked listings to include in the shortlist.",
              "constraints": {
                "default": 10,
                "minimum": 3,
                "maximum": 15
              }
            },
            {
              "name": "includeMarkdown",
              "type": "boolean",
              "required": false,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "listingType": "for_sale",
            "objective": "value",
            "priceMin": 200000,
            "priceMax": 750000,
            "bedsMin": 2,
            "bedsMax": 4,
            "bathsMin": 1.5,
            "bathsMax": 4,
            "sqftMin": 1000,
            "sqftMax": 3500,
            "maxListings": 100,
            "shortlistLimit": 10,
            "includeMarkdown": true
          },
          "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
        },
        "exampleRequest": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "objective": "value",
          "priceMin": 200000,
          "priceMax": 750000,
          "bedsMin": 2,
          "bedsMax": 4,
          "bathsMin": 1.5,
          "bathsMax": 4,
          "sqftMin": 1000,
          "sqftMax": 3500,
          "maxListings": 100,
          "shortlistLimit": 10,
          "includeMarkdown": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "report",
            "listings",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True only when enough evidence was collected to deliver the report."
            },
            "tool": {
              "type": "object",
              "description": "AgentBodega product identity and department.",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "description": "Normalized report request and enforced limits.",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "description": "Source-neutral routing and freshness metadata.",
              "additionalProperties": true
            },
            "report": {
              "type": "object",
              "required": [
                "title",
                "executive_summary",
                "insights",
                "sample",
                "benchmarks",
                "price_bands",
                "market_positions",
                "market_signals",
                "segments",
                "decision_lenses",
                "shortlist",
                "outliers",
                "evidence_manifest",
                "data_quality",
                "methodology"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "executive_summary": {
                  "type": "string",
                  "description": "Deterministic summary grounded in the returned sample metrics."
                },
                "insights": {
                  "type": "array",
                  "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                  "items": {
                    "type": "string"
                  }
                },
                "sample": {
                  "type": "object",
                  "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                  "additionalProperties": true
                },
                "benchmarks": {
                  "type": "object",
                  "required": [
                    "list_price_usd",
                    "square_feet",
                    "price_per_sqft_usd",
                    "days_on_market",
                    "bedrooms"
                  ],
                  "properties": {
                    "list_price_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "square_feet": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_per_sqft_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "days_on_market": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "bedrooms": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "price_bands": {
                  "type": "object",
                  "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                  "additionalProperties": true
                },
                "market_positions": {
                  "type": "object",
                  "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                  "additionalProperties": true
                },
                "market_signals": {
                  "type": "object",
                  "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                  "additionalProperties": true
                },
                "segments": {
                  "type": "object",
                  "description": "Inventory groups by home type, postal code, and bedroom count.",
                  "additionalProperties": true
                },
                "decision_lenses": {
                  "type": "object",
                  "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                  "additionalProperties": true
                },
                "shortlist": {
                  "type": "array",
                  "description": "Listings ranked against the requested objective and the current report sample.",
                  "items": {
                    "type": "object",
                    "required": [
                      "rank",
                      "score",
                      "listing_id",
                      "address",
                      "price_usd",
                      "reasons"
                    ],
                    "properties": {
                      "rank": {
                        "type": "integer"
                      },
                      "score": {
                        "type": "number"
                      },
                      "listing_id": {
                        "type": "string"
                      },
                      "address": {
                        "type": "string"
                      },
                      "listing_url": {
                        "type": "string"
                      },
                      "price_usd": {
                        "type": "number"
                      },
                      "beds": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "baths": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "days_on_market": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "cohort": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Context against listings with the same normalized home type and bedroom count.",
                        "additionalProperties": true
                      },
                      "reasons": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "outliers": {
                  "type": "object",
                  "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                  "additionalProperties": true
                },
                "evidence_manifest": {
                  "type": "object",
                  "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                  "additionalProperties": true
                },
                "data_quality": {
                  "type": "object",
                  "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                  "additionalProperties": true
                },
                "methodology": {
                  "type": "object",
                  "description": "Transparent calculation and interpretation boundaries.",
                  "additionalProperties": true
                },
                "markdown": {
                  "type": "string",
                  "description": "Optional ready-to-render report."
                }
              },
              "additionalProperties": true
            },
            "listings": {
              "type": "array",
              "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "report",
            "listings",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True only when enough evidence was collected to deliver the report."
            },
            "tool": {
              "type": "object",
              "description": "AgentBodega product identity and department.",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "description": "Normalized report request and enforced limits.",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "description": "Source-neutral routing and freshness metadata.",
              "additionalProperties": true
            },
            "report": {
              "type": "object",
              "required": [
                "title",
                "executive_summary",
                "insights",
                "sample",
                "benchmarks",
                "price_bands",
                "market_positions",
                "market_signals",
                "segments",
                "decision_lenses",
                "shortlist",
                "outliers",
                "evidence_manifest",
                "data_quality",
                "methodology"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "executive_summary": {
                  "type": "string",
                  "description": "Deterministic summary grounded in the returned sample metrics."
                },
                "insights": {
                  "type": "array",
                  "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                  "items": {
                    "type": "string"
                  }
                },
                "sample": {
                  "type": "object",
                  "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                  "additionalProperties": true
                },
                "benchmarks": {
                  "type": "object",
                  "required": [
                    "list_price_usd",
                    "square_feet",
                    "price_per_sqft_usd",
                    "days_on_market",
                    "bedrooms"
                  ],
                  "properties": {
                    "list_price_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "square_feet": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_per_sqft_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "days_on_market": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "bedrooms": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "price_bands": {
                  "type": "object",
                  "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                  "additionalProperties": true
                },
                "market_positions": {
                  "type": "object",
                  "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                  "additionalProperties": true
                },
                "market_signals": {
                  "type": "object",
                  "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                  "additionalProperties": true
                },
                "segments": {
                  "type": "object",
                  "description": "Inventory groups by home type, postal code, and bedroom count.",
                  "additionalProperties": true
                },
                "decision_lenses": {
                  "type": "object",
                  "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                  "additionalProperties": true
                },
                "shortlist": {
                  "type": "array",
                  "description": "Listings ranked against the requested objective and the current report sample.",
                  "items": {
                    "type": "object",
                    "required": [
                      "rank",
                      "score",
                      "listing_id",
                      "address",
                      "price_usd",
                      "reasons"
                    ],
                    "properties": {
                      "rank": {
                        "type": "integer"
                      },
                      "score": {
                        "type": "number"
                      },
                      "listing_id": {
                        "type": "string"
                      },
                      "address": {
                        "type": "string"
                      },
                      "listing_url": {
                        "type": "string"
                      },
                      "price_usd": {
                        "type": "number"
                      },
                      "beds": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "baths": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "days_on_market": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "cohort": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Context against listings with the same normalized home type and bedroom count.",
                        "additionalProperties": true
                      },
                      "reasons": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "outliers": {
                  "type": "object",
                  "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                  "additionalProperties": true
                },
                "evidence_manifest": {
                  "type": "object",
                  "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                  "additionalProperties": true
                },
                "data_quality": {
                  "type": "object",
                  "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                  "additionalProperties": true
                },
                "methodology": {
                  "type": "object",
                  "description": "Transparent calculation and interpretation boundaries.",
                  "additionalProperties": true
                },
                "markdown": {
                  "type": "string",
                  "description": "Optional ready-to-render report."
                }
              },
              "additionalProperties": true
            },
            "listings": {
              "type": "array",
              "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "real-estate-market-intelligence",
            "name": "Real Estate Market Intelligence Report",
            "department": "Real Estate"
          },
          "requested": {
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "filters": {
              "zipCode": "77008",
              "priceMin": 200000,
              "priceMax": 750000,
              "bedsMin": 2,
              "bedsMax": 4,
              "bathsMin": 1.5,
              "bathsMax": 4,
              "sqftMin": 1000,
              "sqftMax": 3500
            },
            "inventoryClass": "home-listings",
            "listingType": "for_sale",
            "objective": "value",
            "maxListings": 100,
            "shortlistLimit": 10,
            "evidenceScope": "shortlist-only",
            "includeMarkdown": true,
            "smartScrape": false
          },
          "source": {
            "selected": "managed-public-listings",
            "inventoryClass": "home-listings",
            "routing": "managed-adapter",
            "resultFreshness": "live-run",
            "upstreamDetailsDisclosed": false
          },
          "report": {
            "title": "Houston, TX 77008 Real Estate Market Intelligence",
            "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008. The sample median listing price is $525,000 and the median price per square foot is $248. The value shortlist ranks listings only against this current sample. Data confidence is high.",
            "insights": [
              "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000.",
              "11 of 39 listings with square-footage evidence sit below both sample medians."
            ],
            "sample": {
              "raw_count": 50,
              "duplicate_count": 3,
              "unique_count": 47,
              "eligible_count": 42,
              "excluded_count": 5
            },
            "benchmarks": {
              "list_price_usd": {
                "count": 42,
                "min": 239000,
                "p25": 389000,
                "median": 525000,
                "mean": 548120.24,
                "p75": 675000,
                "max": 750000
              },
              "square_feet": {
                "count": 39,
                "min": 960,
                "p25": 1480,
                "median": 1980,
                "mean": 2051.41,
                "p75": 2440,
                "max": 3890
              },
              "price_per_sqft_usd": {
                "count": 39,
                "min": 174.82,
                "p25": 215.6,
                "median": 248,
                "mean": 252.43,
                "p75": 284.7,
                "max": 342.91
              },
              "days_on_market": {
                "count": 31,
                "min": 1,
                "p25": 7,
                "median": 18,
                "mean": 27.42,
                "p75": 35,
                "max": 103
              },
              "bedrooms": {
                "count": 42,
                "min": 2,
                "p25": 3,
                "median": 3,
                "mean": 3.29,
                "p75": 4,
                "max": 6
              }
            },
            "price_bands": {
              "basis": "current sample list price quartiles",
              "observed_count": 42,
              "bands": [
                {
                  "id": "under-p25",
                  "label": "Lower quartile",
                  "count": 11,
                  "share_pct": 26.2,
                  "lower_usd": null,
                  "upper_usd": 389000
                }
              ]
            },
            "market_positions": {
              "basis": {
                "median_price_usd": 525000,
                "median_price_per_sqft_usd": 248
              },
              "observed_count": 39,
              "positions": [
                {
                  "id": "relative-value",
                  "label": "Below both medians",
                  "count": 11,
                  "share_pct": 28.2
                }
              ]
            },
            "market_signals": {
              "below_median_price": {
                "count": 21,
                "share_pct": 50
              },
              "below_both_price_medians": {
                "count": 11,
                "share_pct": 28.2,
                "observed_count": 39
              },
              "fresh_7_days_or_less": {
                "count": 8,
                "share_pct": 25.8,
                "observed_count": 31
              }
            },
            "segments": {
              "by_home_type": [
                {
                  "label": "SINGLE_FAMILY",
                  "count": 28,
                  "median_price_usd": 549500,
                  "median_price_per_sqft_usd": 251.2
                }
              ],
              "by_postal_code": [
                {
                  "label": "77008",
                  "count": 42,
                  "median_price_usd": 525000,
                  "median_price_per_sqft_usd": 248
                }
              ],
              "by_bedrooms": [
                {
                  "label": "3 bedrooms",
                  "count": 24,
                  "median_price_usd": 510000,
                  "median_price_per_sqft_usd": 246.5
                }
              ]
            },
            "decision_lenses": {
              "balanced": [
                {
                  "rank": 1,
                  "listing_id": "84007409",
                  "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                  "price_usd": 450000
                }
              ],
              "value": [
                {
                  "rank": 1,
                  "listing_id": "84007409",
                  "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                  "price_usd": 450000
                }
              ]
            },
            "shortlist": [
              {
                "rank": 1,
                "score": 94.2,
                "listing_id": "84007409",
                "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                "listing_url": "https://example.com/listing/84007409",
                "price_usd": 450000,
                "beds": 3,
                "baths": 4,
                "sqft": 2043,
                "price_per_sqft_usd": 220.26,
                "days_on_market": 6,
                "price_vs_market_pct": -14.3,
                "price_per_sqft_vs_market_pct": -11.2,
                "reasons": [
                  "14.3% below sample median price",
                  "11.2% below sample median price per square foot"
                ]
              }
            ],
            "outliers": {
              "method": "1.5 x interquartile range review flags",
              "interpretation": "Review flags are not valuation claims.",
              "count": 0,
              "listings": []
            },
            "evidence_manifest": {
              "analyzed_listing_count": 42,
              "returned_listing_count": 0,
              "evidence_scope": "shortlist-only",
              "full_listing_rows_included": false,
              "shortlist_count": 10,
              "enforced_max_listing_cap": 100
            },
            "data_quality": {
              "confidence": "high",
              "coverage": {
                "price_pct": 100,
                "address_pct": 100,
                "listing_url_pct": 100,
                "square_feet_pct": 92.9,
                "price_per_sqft_pct": 92.9,
                "days_on_market_pct": 73.8,
                "bedrooms_pct": 100
              },
              "warnings": [
                "Public listing inventory can change after this snapshot and may not include every listing in the market."
              ],
              "limitations": [
                "Current public listing sample, not full MLS coverage."
              ]
            },
            "methodology": {
              "calculation": "Deterministic descriptive statistics with interpolated quartiles and relative within-sample ranking.",
              "ranking_objective": "value",
              "minimum_usable_listings": 5,
              "historical_trends_included": false,
              "appraisal_or_investment_advice": false
            },
            "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nAnalyzed 42 unique current listings."
          },
          "listings": [],
          "checkedAt": "2026-07-14T00:00:00.000Z"
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/real-estate/intelligence/bundle",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Real Estate Intelligence + Evidence Bundle",
      "description": "Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.",
      "longDescription": "Purpose: Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nBest use: Use this when an agent needs return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nPrice: $0.85 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```",
      "category": "real-estate",
      "kind": "real-estate-report-bundle",
      "departmentId": "real-estate",
      "department": "Real Estate",
      "aisleId": "market-intelligence",
      "aisle": "Market Intelligence",
      "shelfId": "market-reports",
      "shelf": "Market Reports",
      "offeringId": "real-estate-market-intelligence-with-listings",
      "offering": "Real Estate Intelligence + Evidence Bundle",
      "pathIds": [
        "real-estate",
        "market-intelligence",
        "market-reports",
        "real-estate-market-intelligence-with-listings"
      ],
      "pathLabels": [
        "Real Estate",
        "Market Intelligence",
        "Market Reports",
        "Real Estate Intelligence + Evidence Bundle"
      ],
      "taxonomyPath": "real-estate.market-intelligence.market-reports.real-estate-market-intelligence-with-listings",
      "layout": {
        "department": {
          "id": "real-estate",
          "name": "Real Estate"
        },
        "aisle": {
          "id": "market-intelligence",
          "name": "Market Intelligence"
        },
        "shelf": {
          "id": "market-reports",
          "name": "Market Reports"
        },
        "offering": {
          "id": "real-estate-market-intelligence-with-listings",
          "name": "Real Estate Intelligence + Evidence Bundle"
        },
        "pathIds": [
          "real-estate",
          "market-intelligence",
          "market-reports",
          "real-estate-market-intelligence-with-listings"
        ],
        "pathLabels": [
          "Real Estate",
          "Market Intelligence",
          "Market Reports",
          "Real Estate Intelligence + Evidence Bundle"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "real-estate",
        "market-intelligence",
        "market-report",
        "evidence-bundle",
        "analyzed-listings",
        "listing-analysis",
        "pricing-benchmarks",
        "price-bands",
        "decision-lenses",
        "housing",
        "for-sale",
        "for-rent",
        "public-data",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "850000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "850000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "anyOf": [
          {
            "required": [
              "market"
            ]
          },
          {
            "required": [
              "zipCode"
            ]
          }
        ],
        "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
        "properties": {
          "market": {
            "type": "string",
            "minLength": 2,
            "maxLength": 180,
            "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
          },
          "zipCode": {
            "type": "string",
            "pattern": "^\\d{5}$",
            "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
          },
          "listingType": {
            "type": "string",
            "enum": [
              "for_sale",
              "for_rent",
              "foreclosure"
            ],
            "default": "for_sale",
            "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
          },
          "objective": {
            "type": "string",
            "enum": [
              "balanced",
              "value",
              "low-price",
              "newest",
              "space"
            ],
            "default": "balanced",
            "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
          },
          "priceMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
          },
          "priceMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
          },
          "bedsMin": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
          },
          "bedsMax": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
          },
          "bathsMin": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
          },
          "bathsMax": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
          },
          "sqftMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
          },
          "sqftMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
          },
          "homeTypes": {
            "type": "array",
            "maxItems": 7,
            "items": {
              "type": "string",
              "enum": [
                "houses",
                "townhomes",
                "multifamily",
                "condos",
                "land",
                "apartments",
                "manufactured"
              ],
              "description": "Home Types item filter for Real Estate Intelligence + Evidence Bundle. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
            },
            "description": "Optional home-type filters for home-sale searches."
          },
          "propertyType": {
            "type": "string",
            "enum": [
              "apartments",
              "houses",
              "townhomes",
              "condos"
            ],
            "description": "Rental property type used for apartment-market reports."
          },
          "bedrooms": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "any",
                  "studio",
                  "1",
                  "2",
                  "3",
                  "4",
                  "5+"
                ]
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 5
              }
            ],
            "description": "Rental bedroom filter used for apartment-market reports."
          },
          "maxRent": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "newest",
              "relevance",
              "pricea",
              "priced",
              "beds",
              "baths",
              "size",
              "lot",
              "zest"
            ],
            "default": "newest",
            "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
          },
          "daysOnMarket": {
            "type": "string",
            "enum": [
              "",
              "1",
              "7",
              "14",
              "30",
              "90",
              "6m",
              "12m",
              "24m",
              "36m"
            ],
            "default": "",
            "description": "Optional maximum listing-age bucket supported by home-sale searches."
          },
          "maxPages": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2,
            "default": 1,
            "description": "Maximum rendered result pages for apartment-market reports."
          },
          "maxListings": {
            "type": "integer",
            "minimum": 10,
            "maximum": 100,
            "default": 100,
            "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
          },
          "shortlistLimit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 15,
            "default": 10,
            "description": "Maximum ranked listings to include in the shortlist."
          },
          "includeMarkdown": {
            "type": "boolean",
            "default": true,
            "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "market",
          "zipCode",
          "listingType",
          "objective",
          "priceMin",
          "priceMax",
          "bedsMin",
          "bedsMax",
          "bathsMin",
          "bathsMax",
          "sqftMin",
          "sqftMax",
          "homeTypes",
          "propertyType",
          "bedrooms",
          "maxRent",
          "sortBy",
          "daysOnMarket",
          "maxPages",
          "maxListings",
          "shortlistLimit",
          "includeMarkdown"
        ],
        "fields": [
          {
            "name": "market",
            "type": "string",
            "required": false,
            "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
            "constraints": {
              "minLength": 2,
              "maxLength": 180
            }
          },
          {
            "name": "zipCode",
            "type": "string",
            "required": false,
            "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
          },
          {
            "name": "listingType",
            "type": "string",
            "required": false,
            "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
            "constraints": {
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale"
            }
          },
          {
            "name": "objective",
            "type": "string",
            "required": false,
            "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
            "constraints": {
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced"
            }
          },
          {
            "name": "priceMin",
            "type": "integer",
            "required": false,
            "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "priceMax",
            "type": "integer",
            "required": false,
            "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "bedsMin",
            "type": "integer",
            "required": false,
            "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bedsMax",
            "type": "integer",
            "required": false,
            "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMin",
            "type": "number",
            "required": false,
            "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMax",
            "type": "number",
            "required": false,
            "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "sqftMin",
            "type": "integer",
            "required": false,
            "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "sqftMax",
            "type": "integer",
            "required": false,
            "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "homeTypes",
            "type": "array",
            "required": false,
            "description": "Optional home-type filters for home-sale searches.",
            "constraints": {
              "maxItems": 7
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "propertyType",
            "type": "string",
            "required": false,
            "description": "Rental property type used for apartment-market reports.",
            "constraints": {
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ]
            }
          },
          {
            "name": "bedrooms",
            "type": "any",
            "required": false,
            "description": "Rental bedroom filter used for apartment-market reports."
          },
          {
            "name": "maxRent",
            "type": "integer",
            "required": false,
            "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "sortBy",
            "type": "string",
            "required": false,
            "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
            "constraints": {
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest"
            }
          },
          {
            "name": "daysOnMarket",
            "type": "string",
            "required": false,
            "description": "Optional maximum listing-age bucket supported by home-sale searches.",
            "constraints": {
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": ""
            }
          },
          {
            "name": "maxPages",
            "type": "integer",
            "required": false,
            "description": "Maximum rendered result pages for apartment-market reports.",
            "constraints": {
              "default": 1,
              "minimum": 1,
              "maximum": 2
            }
          },
          {
            "name": "maxListings",
            "type": "integer",
            "required": false,
            "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
            "constraints": {
              "default": 100,
              "minimum": 10,
              "maximum": 100
            }
          },
          {
            "name": "shortlistLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum ranked listings to include in the shortlist.",
            "constraints": {
              "default": 10,
              "minimum": 3,
              "maximum": 15
            }
          },
          {
            "name": "includeMarkdown",
            "type": "boolean",
            "required": false,
            "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "objective": "value",
          "priceMin": 200000,
          "priceMax": 750000,
          "bedsMin": 2,
          "bedsMax": 4,
          "bathsMin": 1.5,
          "bathsMax": 4,
          "sqftMin": 1000,
          "sqftMax": 3500,
          "maxListings": 100,
          "shortlistLimit": 10,
          "includeMarkdown": true
        },
        "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
      },
      "exampleRequest": {
        "market": "Houston, TX 77008",
        "zipCode": "77008",
        "listingType": "for_sale",
        "objective": "value",
        "priceMin": 200000,
        "priceMax": 750000,
        "bedsMin": 2,
        "bedsMax": 4,
        "bathsMin": 1.5,
        "bathsMax": 4,
        "sqftMin": 1000,
        "sqftMax": 3500,
        "maxListings": 100,
        "shortlistLimit": 10,
        "includeMarkdown": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "report",
          "listings",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True only when enough evidence was collected to deliver the report."
          },
          "tool": {
            "type": "object",
            "description": "AgentBodega product identity and department.",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "description": "Normalized report request and enforced limits.",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "description": "Source-neutral routing and freshness metadata.",
            "additionalProperties": true
          },
          "report": {
            "type": "object",
            "required": [
              "title",
              "executive_summary",
              "insights",
              "sample",
              "benchmarks",
              "price_bands",
              "market_positions",
              "market_signals",
              "segments",
              "decision_lenses",
              "shortlist",
              "outliers",
              "evidence_manifest",
              "data_quality",
              "methodology"
            ],
            "properties": {
              "title": {
                "type": "string"
              },
              "executive_summary": {
                "type": "string",
                "description": "Deterministic summary grounded in the returned sample metrics."
              },
              "insights": {
                "type": "array",
                "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                "items": {
                  "type": "string"
                }
              },
              "sample": {
                "type": "object",
                "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                "additionalProperties": true
              },
              "benchmarks": {
                "type": "object",
                "required": [
                  "list_price_usd",
                  "square_feet",
                  "price_per_sqft_usd",
                  "days_on_market",
                  "bedrooms"
                ],
                "properties": {
                  "list_price_usd": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "square_feet": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "price_per_sqft_usd": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "days_on_market": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "bedrooms": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              "price_bands": {
                "type": "object",
                "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                "additionalProperties": true
              },
              "market_positions": {
                "type": "object",
                "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                "additionalProperties": true
              },
              "market_signals": {
                "type": "object",
                "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                "additionalProperties": true
              },
              "segments": {
                "type": "object",
                "description": "Inventory groups by home type, postal code, and bedroom count.",
                "additionalProperties": true
              },
              "decision_lenses": {
                "type": "object",
                "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                "additionalProperties": true
              },
              "shortlist": {
                "type": "array",
                "description": "Listings ranked against the requested objective and the current report sample.",
                "items": {
                  "type": "object",
                  "required": [
                    "rank",
                    "score",
                    "listing_id",
                    "address",
                    "price_usd",
                    "reasons"
                  ],
                  "properties": {
                    "rank": {
                      "type": "integer"
                    },
                    "score": {
                      "type": "number"
                    },
                    "listing_id": {
                      "type": "string"
                    },
                    "address": {
                      "type": "string"
                    },
                    "listing_url": {
                      "type": "string"
                    },
                    "price_usd": {
                      "type": "number"
                    },
                    "beds": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "baths": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "sqft": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_per_sqft_usd": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "days_on_market": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_vs_market_pct": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_per_sqft_vs_market_pct": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "cohort": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Context against listings with the same normalized home type and bedroom count.",
                      "additionalProperties": true
                    },
                    "reasons": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "additionalProperties": true
                }
              },
              "outliers": {
                "type": "object",
                "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                "additionalProperties": true
              },
              "evidence_manifest": {
                "type": "object",
                "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                "additionalProperties": true
              },
              "data_quality": {
                "type": "object",
                "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                "additionalProperties": true
              },
              "methodology": {
                "type": "object",
                "description": "Transparent calculation and interpretation boundaries.",
                "additionalProperties": true
              },
              "markdown": {
                "type": "string",
                "description": "Optional ready-to-render report."
              }
            },
            "additionalProperties": true
          },
          "listings": {
            "type": "array",
            "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "real-estate-market-intelligence-with-listings",
          "name": "Real Estate Intelligence + Evidence Bundle",
          "department": "Real Estate"
        },
        "requested": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "filters": {
            "zipCode": "77008",
            "priceMin": 200000,
            "priceMax": 750000,
            "bedsMin": 2,
            "bedsMax": 4,
            "bathsMin": 1.5,
            "bathsMax": 4,
            "sqftMin": 1000,
            "sqftMax": 3500
          },
          "inventoryClass": "home-listings",
          "listingType": "for_sale",
          "objective": "value",
          "maxListings": 100,
          "shortlistLimit": 10,
          "evidenceScope": "all-analyzed",
          "includeMarkdown": true,
          "smartScrape": false
        },
        "source": {
          "selected": "managed-public-listings",
          "inventoryClass": "home-listings",
          "routing": "managed-adapter",
          "resultFreshness": "live-run",
          "upstreamDetailsDisclosed": false
        },
        "report": {
          "title": "Houston, TX 77008 Real Estate Market Intelligence",
          "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008 with complete normalized evidence rows included.",
          "insights": [
            "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000."
          ],
          "sample": {
            "raw_count": 50,
            "duplicate_count": 3,
            "unique_count": 47,
            "eligible_count": 42,
            "excluded_count": 5
          },
          "benchmarks": {
            "list_price_usd": {
              "count": 42,
              "min": 239000,
              "p25": 389000,
              "median": 525000,
              "mean": 548120.24,
              "p75": 675000,
              "max": 750000
            }
          },
          "price_bands": {
            "basis": "current sample list price quartiles",
            "observed_count": 42,
            "bands": [
              {
                "id": "under-p25",
                "label": "Lower quartile",
                "count": 11,
                "share_pct": 26.2,
                "lower_usd": null,
                "upper_usd": 389000
              }
            ]
          },
          "market_positions": {
            "basis": {
              "median_price_usd": 525000,
              "median_price_per_sqft_usd": 248
            },
            "observed_count": 39,
            "positions": [
              {
                "id": "relative-value",
                "label": "Below both medians",
                "count": 11,
                "share_pct": 28.2
              }
            ]
          },
          "market_signals": {
            "below_median_price": {
              "count": 21,
              "share_pct": 50
            }
          },
          "segments": {
            "by_home_type": [
              {
                "label": "SINGLE_FAMILY",
                "count": 28,
                "median_price_usd": 549500
              }
            ]
          },
          "decision_lenses": {
            "value": [
              {
                "rank": 1,
                "listing_id": "84007409",
                "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                "price_usd": 450000
              }
            ]
          },
          "shortlist": [
            {
              "rank": 1,
              "score": 94.2,
              "listing_id": "84007409",
              "address": "1328 W 23rd St Unit A, Houston, TX 77008",
              "price_usd": 450000,
              "reasons": [
                "Below both current sample medians"
              ]
            }
          ],
          "outliers": {
            "method": "1.5 x interquartile range review flags",
            "count": 0,
            "listings": []
          },
          "evidence_manifest": {
            "analyzed_listing_count": 42,
            "returned_listing_count": 42,
            "evidence_scope": "all-analyzed",
            "full_listing_rows_included": true,
            "shortlist_count": 10,
            "enforced_max_listing_cap": 100
          },
          "data_quality": {
            "confidence": "high",
            "warnings": [
              "Public listing inventory can change after this snapshot."
            ]
          },
          "methodology": {
            "calculation": "Deterministic descriptive statistics and relative within-sample ranking.",
            "ranking_objective": "value",
            "minimum_usable_listings": 5,
            "historical_trends_included": false,
            "appraisal_or_investment_advice": false
          },
          "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nComplete analyzed evidence included."
        },
        "listings": [
          {
            "listing_id": "84007409",
            "address": "1328 W 23rd St Unit A, Houston, TX 77008",
            "price_usd": 450000,
            "beds": 3,
            "baths": 4,
            "sqft": 2043,
            "price_per_sqft_usd": 220.26
          }
        ],
        "checkedAt": "2026-07-14T00:00:00.000Z"
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "objective": "value",
                "priceMin": 200000,
                "priceMax": 750000,
                "bedsMin": 2,
                "bedsMax": 4,
                "bathsMin": 1.5,
                "bathsMax": 4,
                "sqftMin": 1000,
                "sqftMax": 3500,
                "maxListings": 100,
                "shortlistLimit": 10,
                "includeMarkdown": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "real-estate-market-intelligence-with-listings",
                  "name": "Real Estate Intelligence + Evidence Bundle",
                  "department": "Real Estate"
                },
                "requested": {
                  "market": "Houston, TX 77008",
                  "zipCode": "77008",
                  "filters": {
                    "zipCode": "77008",
                    "priceMin": 200000,
                    "priceMax": 750000,
                    "bedsMin": 2,
                    "bedsMax": 4,
                    "bathsMin": 1.5,
                    "bathsMax": 4,
                    "sqftMin": 1000,
                    "sqftMax": 3500
                  },
                  "inventoryClass": "home-listings",
                  "listingType": "for_sale",
                  "objective": "value",
                  "maxListings": 100,
                  "shortlistLimit": 10,
                  "evidenceScope": "all-analyzed",
                  "includeMarkdown": true,
                  "smartScrape": false
                },
                "source": {
                  "selected": "managed-public-listings",
                  "inventoryClass": "home-listings",
                  "routing": "managed-adapter",
                  "resultFreshness": "live-run",
                  "upstreamDetailsDisclosed": false
                },
                "report": {
                  "title": "Houston, TX 77008 Real Estate Market Intelligence",
                  "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008 with complete normalized evidence rows included.",
                  "insights": [
                    "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000."
                  ],
                  "sample": {
                    "raw_count": 50,
                    "duplicate_count": 3,
                    "unique_count": 47,
                    "eligible_count": 42,
                    "excluded_count": 5
                  },
                  "benchmarks": {
                    "list_price_usd": {
                      "count": 42,
                      "min": 239000,
                      "p25": 389000,
                      "median": 525000,
                      "mean": 548120.24,
                      "p75": 675000,
                      "max": 750000
                    }
                  },
                  "price_bands": {
                    "basis": "current sample list price quartiles",
                    "observed_count": 42,
                    "bands": [
                      {
                        "id": "under-p25",
                        "label": "Lower quartile",
                        "count": 11,
                        "share_pct": 26.2,
                        "lower_usd": null,
                        "upper_usd": 389000
                      }
                    ]
                  },
                  "market_positions": {
                    "basis": {
                      "median_price_usd": 525000,
                      "median_price_per_sqft_usd": 248
                    },
                    "observed_count": 39,
                    "positions": [
                      {
                        "id": "relative-value",
                        "label": "Below both medians",
                        "count": 11,
                        "share_pct": 28.2
                      }
                    ]
                  },
                  "market_signals": {
                    "below_median_price": {
                      "count": 21,
                      "share_pct": 50
                    }
                  },
                  "segments": {
                    "by_home_type": [
                      {
                        "label": "SINGLE_FAMILY",
                        "count": 28,
                        "median_price_usd": 549500
                      }
                    ]
                  },
                  "decision_lenses": {
                    "value": [
                      {
                        "rank": 1,
                        "listing_id": "84007409",
                        "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                        "price_usd": 450000
                      }
                    ]
                  },
                  "shortlist": [
                    {
                      "rank": 1,
                      "score": 94.2,
                      "listing_id": "84007409",
                      "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                      "price_usd": 450000,
                      "reasons": [
                        "Below both current sample medians"
                      ]
                    }
                  ],
                  "outliers": {
                    "method": "1.5 x interquartile range review flags",
                    "count": 0,
                    "listings": []
                  },
                  "evidence_manifest": {
                    "analyzed_listing_count": 42,
                    "returned_listing_count": 42,
                    "evidence_scope": "all-analyzed",
                    "full_listing_rows_included": true,
                    "shortlist_count": 10,
                    "enforced_max_listing_cap": 100
                  },
                  "data_quality": {
                    "confidence": "high",
                    "warnings": [
                      "Public listing inventory can change after this snapshot."
                    ]
                  },
                  "methodology": {
                    "calculation": "Deterministic descriptive statistics and relative within-sample ranking.",
                    "ranking_objective": "value",
                    "minimum_usable_listings": 5,
                    "historical_trends_included": false,
                    "appraisal_or_investment_advice": false
                  },
                  "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nComplete analyzed evidence included."
                },
                "listings": [
                  {
                    "listing_id": "84007409",
                    "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                    "price_usd": 450000,
                    "beds": 3,
                    "baths": 4,
                    "sqft": 2043,
                    "price_per_sqft_usd": 220.26
                  }
                ],
                "checkedAt": "2026-07-14T00:00:00.000Z"
              }
            }
          },
          "routeTemplate": "/api/real-estate/intelligence/bundle",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "anyOf": [
                      {
                        "required": [
                          "market"
                        ]
                      },
                      {
                        "required": [
                          "zipCode"
                        ]
                      }
                    ],
                    "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
                    "properties": {
                      "market": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 180,
                        "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
                      },
                      "zipCode": {
                        "type": "string",
                        "pattern": "^\\d{5}$",
                        "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                      },
                      "listingType": {
                        "type": "string",
                        "enum": [
                          "for_sale",
                          "for_rent",
                          "foreclosure"
                        ],
                        "default": "for_sale",
                        "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
                      },
                      "objective": {
                        "type": "string",
                        "enum": [
                          "balanced",
                          "value",
                          "low-price",
                          "newest",
                          "space"
                        ],
                        "default": "balanced",
                        "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
                      },
                      "priceMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
                      },
                      "priceMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
                      },
                      "bedsMin": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                      },
                      "bedsMax": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                      },
                      "bathsMin": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                      },
                      "bathsMax": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                      },
                      "sqftMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                      },
                      "sqftMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                      },
                      "homeTypes": {
                        "type": "array",
                        "maxItems": 7,
                        "items": {
                          "type": "string",
                          "enum": [
                            "houses",
                            "townhomes",
                            "multifamily",
                            "condos",
                            "land",
                            "apartments",
                            "manufactured"
                          ],
                          "description": "Home Types item filter for Real Estate Intelligence + Evidence Bundle. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                        },
                        "description": "Optional home-type filters for home-sale searches."
                      },
                      "propertyType": {
                        "type": "string",
                        "enum": [
                          "apartments",
                          "houses",
                          "townhomes",
                          "condos"
                        ],
                        "description": "Rental property type used for apartment-market reports."
                      },
                      "bedrooms": {
                        "oneOf": [
                          {
                            "type": "string",
                            "enum": [
                              "any",
                              "studio",
                              "1",
                              "2",
                              "3",
                              "4",
                              "5+"
                            ]
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 5
                          }
                        ],
                        "description": "Rental bedroom filter used for apartment-market reports."
                      },
                      "maxRent": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
                      },
                      "sortBy": {
                        "type": "string",
                        "enum": [
                          "newest",
                          "relevance",
                          "pricea",
                          "priced",
                          "beds",
                          "baths",
                          "size",
                          "lot",
                          "zest"
                        ],
                        "default": "newest",
                        "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
                      },
                      "daysOnMarket": {
                        "type": "string",
                        "enum": [
                          "",
                          "1",
                          "7",
                          "14",
                          "30",
                          "90",
                          "6m",
                          "12m",
                          "24m",
                          "36m"
                        ],
                        "default": "",
                        "description": "Optional maximum listing-age bucket supported by home-sale searches."
                      },
                      "maxPages": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 2,
                        "default": 1,
                        "description": "Maximum rendered result pages for apartment-market reports."
                      },
                      "maxListings": {
                        "type": "integer",
                        "minimum": 10,
                        "maximum": 100,
                        "default": 100,
                        "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
                      },
                      "shortlistLimit": {
                        "type": "integer",
                        "minimum": 3,
                        "maximum": 15,
                        "default": 10,
                        "description": "Maximum ranked listings to include in the shortlist."
                      },
                      "includeMarkdown": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "report",
                      "listings",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True only when enough evidence was collected to deliver the report."
                      },
                      "tool": {
                        "type": "object",
                        "description": "AgentBodega product identity and department.",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "description": "Normalized report request and enforced limits.",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "description": "Source-neutral routing and freshness metadata.",
                        "additionalProperties": true
                      },
                      "report": {
                        "type": "object",
                        "required": [
                          "title",
                          "executive_summary",
                          "insights",
                          "sample",
                          "benchmarks",
                          "price_bands",
                          "market_positions",
                          "market_signals",
                          "segments",
                          "decision_lenses",
                          "shortlist",
                          "outliers",
                          "evidence_manifest",
                          "data_quality",
                          "methodology"
                        ],
                        "properties": {
                          "title": {
                            "type": "string"
                          },
                          "executive_summary": {
                            "type": "string",
                            "description": "Deterministic summary grounded in the returned sample metrics."
                          },
                          "insights": {
                            "type": "array",
                            "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                            "items": {
                              "type": "string"
                            }
                          },
                          "sample": {
                            "type": "object",
                            "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                            "additionalProperties": true
                          },
                          "benchmarks": {
                            "type": "object",
                            "required": [
                              "list_price_usd",
                              "square_feet",
                              "price_per_sqft_usd",
                              "days_on_market",
                              "bedrooms"
                            ],
                            "properties": {
                              "list_price_usd": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "square_feet": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "price_per_sqft_usd": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "days_on_market": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "bedrooms": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              }
                            },
                            "additionalProperties": false
                          },
                          "price_bands": {
                            "type": "object",
                            "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                            "additionalProperties": true
                          },
                          "market_positions": {
                            "type": "object",
                            "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                            "additionalProperties": true
                          },
                          "market_signals": {
                            "type": "object",
                            "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                            "additionalProperties": true
                          },
                          "segments": {
                            "type": "object",
                            "description": "Inventory groups by home type, postal code, and bedroom count.",
                            "additionalProperties": true
                          },
                          "decision_lenses": {
                            "type": "object",
                            "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                            "additionalProperties": true
                          },
                          "shortlist": {
                            "type": "array",
                            "description": "Listings ranked against the requested objective and the current report sample.",
                            "items": {
                              "type": "object",
                              "required": [
                                "rank",
                                "score",
                                "listing_id",
                                "address",
                                "price_usd",
                                "reasons"
                              ],
                              "properties": {
                                "rank": {
                                  "type": "integer"
                                },
                                "score": {
                                  "type": "number"
                                },
                                "listing_id": {
                                  "type": "string"
                                },
                                "address": {
                                  "type": "string"
                                },
                                "listing_url": {
                                  "type": "string"
                                },
                                "price_usd": {
                                  "type": "number"
                                },
                                "beds": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "baths": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "sqft": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_per_sqft_usd": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "days_on_market": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_vs_market_pct": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_per_sqft_vs_market_pct": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "cohort": {
                                  "type": [
                                    "object",
                                    "null"
                                  ],
                                  "description": "Context against listings with the same normalized home type and bedroom count.",
                                  "additionalProperties": true
                                },
                                "reasons": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              },
                              "additionalProperties": true
                            }
                          },
                          "outliers": {
                            "type": "object",
                            "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                            "additionalProperties": true
                          },
                          "evidence_manifest": {
                            "type": "object",
                            "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                            "additionalProperties": true
                          },
                          "data_quality": {
                            "type": "object",
                            "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                            "additionalProperties": true
                          },
                          "methodology": {
                            "type": "object",
                            "description": "Transparent calculation and interpretation boundaries.",
                            "additionalProperties": true
                          },
                          "markdown": {
                            "type": "string",
                            "description": "Optional ready-to-render report."
                          }
                        },
                        "additionalProperties": true
                      },
                      "listings": {
                        "type": "array",
                        "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "real-estate-market-intelligence-with-listings",
            "url": "https://agentbodega.store/api/real-estate/intelligence/bundle",
            "method": "POST",
            "description": "Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.",
            "longDescription": "Purpose: Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nBest use: Use this when an agent needs return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nPrice: $0.85 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Real Estate Intelligence + Evidence Bundle",
            "category": "real-estate",
            "kind": "real-estate-report-bundle",
            "tags": [
              "real-estate",
              "market-intelligence",
              "market-report",
              "evidence-bundle",
              "analyzed-listings",
              "listing-analysis",
              "pricing-benchmarks",
              "price-bands",
              "decision-lenses",
              "housing",
              "for-sale",
              "for-rent",
              "public-data",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "market",
                "zipCode",
                "listingType",
                "objective",
                "priceMin",
                "priceMax",
                "bedsMin",
                "bedsMax",
                "bathsMin",
                "bathsMax",
                "sqftMin",
                "sqftMax",
                "homeTypes",
                "propertyType",
                "bedrooms",
                "maxRent",
                "sortBy",
                "daysOnMarket",
                "maxPages",
                "maxListings",
                "shortlistLimit",
                "includeMarkdown"
              ],
              "fields": [
                {
                  "name": "market",
                  "type": "string",
                  "required": false,
                  "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 180
                  }
                },
                {
                  "name": "zipCode",
                  "type": "string",
                  "required": false,
                  "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                },
                {
                  "name": "listingType",
                  "type": "string",
                  "required": false,
                  "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
                  "constraints": {
                    "enum": [
                      "for_sale",
                      "for_rent",
                      "foreclosure"
                    ],
                    "default": "for_sale"
                  }
                },
                {
                  "name": "objective",
                  "type": "string",
                  "required": false,
                  "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
                  "constraints": {
                    "enum": [
                      "balanced",
                      "value",
                      "low-price",
                      "newest",
                      "space"
                    ],
                    "default": "balanced"
                  }
                },
                {
                  "name": "priceMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "priceMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "bedsMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bedsMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMin",
                  "type": "number",
                  "required": false,
                  "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMax",
                  "type": "number",
                  "required": false,
                  "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "sqftMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "sqftMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "homeTypes",
                  "type": "array",
                  "required": false,
                  "description": "Optional home-type filters for home-sale searches.",
                  "constraints": {
                    "maxItems": 7
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "propertyType",
                  "type": "string",
                  "required": false,
                  "description": "Rental property type used for apartment-market reports.",
                  "constraints": {
                    "enum": [
                      "apartments",
                      "houses",
                      "townhomes",
                      "condos"
                    ]
                  }
                },
                {
                  "name": "bedrooms",
                  "type": "any",
                  "required": false,
                  "description": "Rental bedroom filter used for apartment-market reports."
                },
                {
                  "name": "maxRent",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "sortBy",
                  "type": "string",
                  "required": false,
                  "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
                  "constraints": {
                    "enum": [
                      "newest",
                      "relevance",
                      "pricea",
                      "priced",
                      "beds",
                      "baths",
                      "size",
                      "lot",
                      "zest"
                    ],
                    "default": "newest"
                  }
                },
                {
                  "name": "daysOnMarket",
                  "type": "string",
                  "required": false,
                  "description": "Optional maximum listing-age bucket supported by home-sale searches.",
                  "constraints": {
                    "enum": [
                      "",
                      "1",
                      "7",
                      "14",
                      "30",
                      "90",
                      "6m",
                      "12m",
                      "24m",
                      "36m"
                    ],
                    "default": ""
                  }
                },
                {
                  "name": "maxPages",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum rendered result pages for apartment-market reports.",
                  "constraints": {
                    "default": 1,
                    "minimum": 1,
                    "maximum": 2
                  }
                },
                {
                  "name": "maxListings",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
                  "constraints": {
                    "default": 100,
                    "minimum": 10,
                    "maximum": 100
                  }
                },
                {
                  "name": "shortlistLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum ranked listings to include in the shortlist.",
                  "constraints": {
                    "default": 10,
                    "minimum": 3,
                    "maximum": 15
                  }
                },
                {
                  "name": "includeMarkdown",
                  "type": "boolean",
                  "required": false,
                  "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "objective": "value",
                "priceMin": 200000,
                "priceMax": 750000,
                "bedsMin": 2,
                "bedsMax": 4,
                "bathsMin": 1.5,
                "bathsMax": 4,
                "sqftMin": 1000,
                "sqftMax": 3500,
                "maxListings": 100,
                "shortlistLimit": 10,
                "includeMarkdown": true
              },
              "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
            },
            "inputSchema": {
              "type": "object",
              "anyOf": [
                {
                  "required": [
                    "market"
                  ]
                },
                {
                  "required": [
                    "zipCode"
                  ]
                }
              ],
              "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
              "properties": {
                "market": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 180,
                  "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
                },
                "zipCode": {
                  "type": "string",
                  "pattern": "^\\d{5}$",
                  "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                },
                "listingType": {
                  "type": "string",
                  "enum": [
                    "for_sale",
                    "for_rent",
                    "foreclosure"
                  ],
                  "default": "for_sale",
                  "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
                },
                "objective": {
                  "type": "string",
                  "enum": [
                    "balanced",
                    "value",
                    "low-price",
                    "newest",
                    "space"
                  ],
                  "default": "balanced",
                  "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
                },
                "priceMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
                },
                "priceMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
                },
                "bedsMin": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                },
                "bedsMax": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                },
                "bathsMin": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                },
                "bathsMax": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                },
                "sqftMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                },
                "sqftMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                },
                "homeTypes": {
                  "type": "array",
                  "maxItems": 7,
                  "items": {
                    "type": "string",
                    "enum": [
                      "houses",
                      "townhomes",
                      "multifamily",
                      "condos",
                      "land",
                      "apartments",
                      "manufactured"
                    ],
                    "description": "Home Types item filter for Real Estate Intelligence + Evidence Bundle. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                  },
                  "description": "Optional home-type filters for home-sale searches."
                },
                "propertyType": {
                  "type": "string",
                  "enum": [
                    "apartments",
                    "houses",
                    "townhomes",
                    "condos"
                  ],
                  "description": "Rental property type used for apartment-market reports."
                },
                "bedrooms": {
                  "oneOf": [
                    {
                      "type": "string",
                      "enum": [
                        "any",
                        "studio",
                        "1",
                        "2",
                        "3",
                        "4",
                        "5+"
                      ]
                    },
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 5
                    }
                  ],
                  "description": "Rental bedroom filter used for apartment-market reports."
                },
                "maxRent": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
                },
                "sortBy": {
                  "type": "string",
                  "enum": [
                    "newest",
                    "relevance",
                    "pricea",
                    "priced",
                    "beds",
                    "baths",
                    "size",
                    "lot",
                    "zest"
                  ],
                  "default": "newest",
                  "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
                },
                "daysOnMarket": {
                  "type": "string",
                  "enum": [
                    "",
                    "1",
                    "7",
                    "14",
                    "30",
                    "90",
                    "6m",
                    "12m",
                    "24m",
                    "36m"
                  ],
                  "default": "",
                  "description": "Optional maximum listing-age bucket supported by home-sale searches."
                },
                "maxPages": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 2,
                  "default": 1,
                  "description": "Maximum rendered result pages for apartment-market reports."
                },
                "maxListings": {
                  "type": "integer",
                  "minimum": 10,
                  "maximum": 100,
                  "default": 100,
                  "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
                },
                "shortlistLimit": {
                  "type": "integer",
                  "minimum": 3,
                  "maximum": 15,
                  "default": 10,
                  "description": "Maximum ranked listings to include in the shortlist."
                },
                "includeMarkdown": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "report",
                "listings",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True only when enough evidence was collected to deliver the report."
                },
                "tool": {
                  "type": "object",
                  "description": "AgentBodega product identity and department.",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "description": "Normalized report request and enforced limits.",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "description": "Source-neutral routing and freshness metadata.",
                  "additionalProperties": true
                },
                "report": {
                  "type": "object",
                  "required": [
                    "title",
                    "executive_summary",
                    "insights",
                    "sample",
                    "benchmarks",
                    "price_bands",
                    "market_positions",
                    "market_signals",
                    "segments",
                    "decision_lenses",
                    "shortlist",
                    "outliers",
                    "evidence_manifest",
                    "data_quality",
                    "methodology"
                  ],
                  "properties": {
                    "title": {
                      "type": "string"
                    },
                    "executive_summary": {
                      "type": "string",
                      "description": "Deterministic summary grounded in the returned sample metrics."
                    },
                    "insights": {
                      "type": "array",
                      "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                      "items": {
                        "type": "string"
                      }
                    },
                    "sample": {
                      "type": "object",
                      "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                      "additionalProperties": true
                    },
                    "benchmarks": {
                      "type": "object",
                      "required": [
                        "list_price_usd",
                        "square_feet",
                        "price_per_sqft_usd",
                        "days_on_market",
                        "bedrooms"
                      ],
                      "properties": {
                        "list_price_usd": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "square_feet": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "price_per_sqft_usd": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "days_on_market": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "bedrooms": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_bands": {
                      "type": "object",
                      "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                      "additionalProperties": true
                    },
                    "market_positions": {
                      "type": "object",
                      "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                      "additionalProperties": true
                    },
                    "market_signals": {
                      "type": "object",
                      "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                      "additionalProperties": true
                    },
                    "segments": {
                      "type": "object",
                      "description": "Inventory groups by home type, postal code, and bedroom count.",
                      "additionalProperties": true
                    },
                    "decision_lenses": {
                      "type": "object",
                      "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                      "additionalProperties": true
                    },
                    "shortlist": {
                      "type": "array",
                      "description": "Listings ranked against the requested objective and the current report sample.",
                      "items": {
                        "type": "object",
                        "required": [
                          "rank",
                          "score",
                          "listing_id",
                          "address",
                          "price_usd",
                          "reasons"
                        ],
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "score": {
                            "type": "number"
                          },
                          "listing_id": {
                            "type": "string"
                          },
                          "address": {
                            "type": "string"
                          },
                          "listing_url": {
                            "type": "string"
                          },
                          "price_usd": {
                            "type": "number"
                          },
                          "beds": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "baths": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "sqft": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_per_sqft_usd": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "days_on_market": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_vs_market_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_per_sqft_vs_market_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "cohort": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Context against listings with the same normalized home type and bedroom count.",
                            "additionalProperties": true
                          },
                          "reasons": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "outliers": {
                      "type": "object",
                      "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                      "additionalProperties": true
                    },
                    "evidence_manifest": {
                      "type": "object",
                      "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                      "additionalProperties": true
                    },
                    "data_quality": {
                      "type": "object",
                      "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                      "additionalProperties": true
                    },
                    "methodology": {
                      "type": "object",
                      "description": "Transparent calculation and interpretation boundaries.",
                      "additionalProperties": true
                    },
                    "markdown": {
                      "type": "string",
                      "description": "Optional ready-to-render report."
                    }
                  },
                  "additionalProperties": true
                },
                "listings": {
                  "type": "array",
                  "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.85"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.85",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/real-estate/intelligence/bundle",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.85"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/real-estate/intelligence/bundle",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "real-estate",
        "kind": "real-estate-report-bundle",
        "taxonomy": {
          "departmentId": "real-estate",
          "department": "Real Estate",
          "aisleId": "market-intelligence",
          "aisle": "Market Intelligence",
          "shelfId": "market-reports",
          "shelf": "Market Reports",
          "offeringId": "real-estate-market-intelligence-with-listings",
          "offering": "Real Estate Intelligence + Evidence Bundle",
          "pathIds": [
            "real-estate",
            "market-intelligence",
            "market-reports",
            "real-estate-market-intelligence-with-listings"
          ],
          "pathLabels": [
            "Real Estate",
            "Market Intelligence",
            "Market Reports",
            "Real Estate Intelligence + Evidence Bundle"
          ],
          "taxonomyPath": "real-estate.market-intelligence.market-reports.real-estate-market-intelligence-with-listings",
          "layout": {
            "department": {
              "id": "real-estate",
              "name": "Real Estate"
            },
            "aisle": {
              "id": "market-intelligence",
              "name": "Market Intelligence"
            },
            "shelf": {
              "id": "market-reports",
              "name": "Market Reports"
            },
            "offering": {
              "id": "real-estate-market-intelligence-with-listings",
              "name": "Real Estate Intelligence + Evidence Bundle"
            },
            "pathIds": [
              "real-estate",
              "market-intelligence",
              "market-reports",
              "real-estate-market-intelligence-with-listings"
            ],
            "pathLabels": [
              "Real Estate",
              "Market Intelligence",
              "Market Reports",
              "Real Estate Intelligence + Evidence Bundle"
            ]
          }
        },
        "description": {
          "short": "Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.",
          "full": "Purpose: Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nBest use: Use this when an agent needs return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nPrice: $0.85 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "market"
              ]
            },
            {
              "required": [
                "zipCode"
              ]
            }
          ],
          "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
          "properties": {
            "market": {
              "type": "string",
              "minLength": 2,
              "maxLength": 180,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
            },
            "objective": {
              "type": "string",
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced",
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Intelligence + Evidence Bundle. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Optional home-type filters for home-sale searches."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used for apartment-market reports."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Optional maximum listing-age bucket supported by home-sale searches."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered result pages for apartment-market reports."
            },
            "maxListings": {
              "type": "integer",
              "minimum": 10,
              "maximum": 100,
              "default": 100,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
            },
            "shortlistLimit": {
              "type": "integer",
              "minimum": 3,
              "maximum": 15,
              "default": 10,
              "description": "Maximum ranked listings to include in the shortlist."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "market"
              ]
            },
            {
              "required": [
                "zipCode"
              ]
            }
          ],
          "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
          "properties": {
            "market": {
              "type": "string",
              "minLength": 2,
              "maxLength": 180,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
            },
            "objective": {
              "type": "string",
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced",
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Intelligence + Evidence Bundle. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Optional home-type filters for home-sale searches."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used for apartment-market reports."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Optional maximum listing-age bucket supported by home-sale searches."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered result pages for apartment-market reports."
            },
            "maxListings": {
              "type": "integer",
              "minimum": 10,
              "maximum": 100,
              "default": 100,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
            },
            "shortlistLimit": {
              "type": "integer",
              "minimum": 3,
              "maximum": 15,
              "default": 10,
              "description": "Maximum ranked listings to include in the shortlist."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "market",
            "zipCode",
            "listingType",
            "objective",
            "priceMin",
            "priceMax",
            "bedsMin",
            "bedsMax",
            "bathsMin",
            "bathsMax",
            "sqftMin",
            "sqftMax",
            "homeTypes",
            "propertyType",
            "bedrooms",
            "maxRent",
            "sortBy",
            "daysOnMarket",
            "maxPages",
            "maxListings",
            "shortlistLimit",
            "includeMarkdown"
          ],
          "fields": [
            {
              "name": "market",
              "type": "string",
              "required": false,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
              "constraints": {
                "minLength": 2,
                "maxLength": 180
              }
            },
            {
              "name": "zipCode",
              "type": "string",
              "required": false,
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            {
              "name": "listingType",
              "type": "string",
              "required": false,
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
              "constraints": {
                "enum": [
                  "for_sale",
                  "for_rent",
                  "foreclosure"
                ],
                "default": "for_sale"
              }
            },
            {
              "name": "objective",
              "type": "string",
              "required": false,
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
              "constraints": {
                "enum": [
                  "balanced",
                  "value",
                  "low-price",
                  "newest",
                  "space"
                ],
                "default": "balanced"
              }
            },
            {
              "name": "priceMin",
              "type": "integer",
              "required": false,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "priceMax",
              "type": "integer",
              "required": false,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "bedsMin",
              "type": "integer",
              "required": false,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bedsMax",
              "type": "integer",
              "required": false,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMin",
              "type": "number",
              "required": false,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMax",
              "type": "number",
              "required": false,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "sqftMin",
              "type": "integer",
              "required": false,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "sqftMax",
              "type": "integer",
              "required": false,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "homeTypes",
              "type": "array",
              "required": false,
              "description": "Optional home-type filters for home-sale searches.",
              "constraints": {
                "maxItems": 7
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "propertyType",
              "type": "string",
              "required": false,
              "description": "Rental property type used for apartment-market reports.",
              "constraints": {
                "enum": [
                  "apartments",
                  "houses",
                  "townhomes",
                  "condos"
                ]
              }
            },
            {
              "name": "bedrooms",
              "type": "any",
              "required": false,
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            {
              "name": "maxRent",
              "type": "integer",
              "required": false,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "sortBy",
              "type": "string",
              "required": false,
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
              "constraints": {
                "enum": [
                  "newest",
                  "relevance",
                  "pricea",
                  "priced",
                  "beds",
                  "baths",
                  "size",
                  "lot",
                  "zest"
                ],
                "default": "newest"
              }
            },
            {
              "name": "daysOnMarket",
              "type": "string",
              "required": false,
              "description": "Optional maximum listing-age bucket supported by home-sale searches.",
              "constraints": {
                "enum": [
                  "",
                  "1",
                  "7",
                  "14",
                  "30",
                  "90",
                  "6m",
                  "12m",
                  "24m",
                  "36m"
                ],
                "default": ""
              }
            },
            {
              "name": "maxPages",
              "type": "integer",
              "required": false,
              "description": "Maximum rendered result pages for apartment-market reports.",
              "constraints": {
                "default": 1,
                "minimum": 1,
                "maximum": 2
              }
            },
            {
              "name": "maxListings",
              "type": "integer",
              "required": false,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
              "constraints": {
                "default": 100,
                "minimum": 10,
                "maximum": 100
              }
            },
            {
              "name": "shortlistLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum ranked listings to include in the shortlist.",
              "constraints": {
                "default": 10,
                "minimum": 3,
                "maximum": 15
              }
            },
            {
              "name": "includeMarkdown",
              "type": "boolean",
              "required": false,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "listingType": "for_sale",
            "objective": "value",
            "priceMin": 200000,
            "priceMax": 750000,
            "bedsMin": 2,
            "bedsMax": 4,
            "bathsMin": 1.5,
            "bathsMax": 4,
            "sqftMin": 1000,
            "sqftMax": 3500,
            "maxListings": 100,
            "shortlistLimit": 10,
            "includeMarkdown": true
          },
          "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
        },
        "exampleRequest": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "objective": "value",
          "priceMin": 200000,
          "priceMax": 750000,
          "bedsMin": 2,
          "bedsMax": 4,
          "bathsMin": 1.5,
          "bathsMax": 4,
          "sqftMin": 1000,
          "sqftMax": 3500,
          "maxListings": 100,
          "shortlistLimit": 10,
          "includeMarkdown": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "report",
            "listings",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True only when enough evidence was collected to deliver the report."
            },
            "tool": {
              "type": "object",
              "description": "AgentBodega product identity and department.",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "description": "Normalized report request and enforced limits.",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "description": "Source-neutral routing and freshness metadata.",
              "additionalProperties": true
            },
            "report": {
              "type": "object",
              "required": [
                "title",
                "executive_summary",
                "insights",
                "sample",
                "benchmarks",
                "price_bands",
                "market_positions",
                "market_signals",
                "segments",
                "decision_lenses",
                "shortlist",
                "outliers",
                "evidence_manifest",
                "data_quality",
                "methodology"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "executive_summary": {
                  "type": "string",
                  "description": "Deterministic summary grounded in the returned sample metrics."
                },
                "insights": {
                  "type": "array",
                  "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                  "items": {
                    "type": "string"
                  }
                },
                "sample": {
                  "type": "object",
                  "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                  "additionalProperties": true
                },
                "benchmarks": {
                  "type": "object",
                  "required": [
                    "list_price_usd",
                    "square_feet",
                    "price_per_sqft_usd",
                    "days_on_market",
                    "bedrooms"
                  ],
                  "properties": {
                    "list_price_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "square_feet": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_per_sqft_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "days_on_market": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "bedrooms": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "price_bands": {
                  "type": "object",
                  "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                  "additionalProperties": true
                },
                "market_positions": {
                  "type": "object",
                  "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                  "additionalProperties": true
                },
                "market_signals": {
                  "type": "object",
                  "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                  "additionalProperties": true
                },
                "segments": {
                  "type": "object",
                  "description": "Inventory groups by home type, postal code, and bedroom count.",
                  "additionalProperties": true
                },
                "decision_lenses": {
                  "type": "object",
                  "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                  "additionalProperties": true
                },
                "shortlist": {
                  "type": "array",
                  "description": "Listings ranked against the requested objective and the current report sample.",
                  "items": {
                    "type": "object",
                    "required": [
                      "rank",
                      "score",
                      "listing_id",
                      "address",
                      "price_usd",
                      "reasons"
                    ],
                    "properties": {
                      "rank": {
                        "type": "integer"
                      },
                      "score": {
                        "type": "number"
                      },
                      "listing_id": {
                        "type": "string"
                      },
                      "address": {
                        "type": "string"
                      },
                      "listing_url": {
                        "type": "string"
                      },
                      "price_usd": {
                        "type": "number"
                      },
                      "beds": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "baths": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "days_on_market": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "cohort": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Context against listings with the same normalized home type and bedroom count.",
                        "additionalProperties": true
                      },
                      "reasons": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "outliers": {
                  "type": "object",
                  "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                  "additionalProperties": true
                },
                "evidence_manifest": {
                  "type": "object",
                  "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                  "additionalProperties": true
                },
                "data_quality": {
                  "type": "object",
                  "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                  "additionalProperties": true
                },
                "methodology": {
                  "type": "object",
                  "description": "Transparent calculation and interpretation boundaries.",
                  "additionalProperties": true
                },
                "markdown": {
                  "type": "string",
                  "description": "Optional ready-to-render report."
                }
              },
              "additionalProperties": true
            },
            "listings": {
              "type": "array",
              "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "report",
            "listings",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True only when enough evidence was collected to deliver the report."
            },
            "tool": {
              "type": "object",
              "description": "AgentBodega product identity and department.",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "description": "Normalized report request and enforced limits.",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "description": "Source-neutral routing and freshness metadata.",
              "additionalProperties": true
            },
            "report": {
              "type": "object",
              "required": [
                "title",
                "executive_summary",
                "insights",
                "sample",
                "benchmarks",
                "price_bands",
                "market_positions",
                "market_signals",
                "segments",
                "decision_lenses",
                "shortlist",
                "outliers",
                "evidence_manifest",
                "data_quality",
                "methodology"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "executive_summary": {
                  "type": "string",
                  "description": "Deterministic summary grounded in the returned sample metrics."
                },
                "insights": {
                  "type": "array",
                  "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                  "items": {
                    "type": "string"
                  }
                },
                "sample": {
                  "type": "object",
                  "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                  "additionalProperties": true
                },
                "benchmarks": {
                  "type": "object",
                  "required": [
                    "list_price_usd",
                    "square_feet",
                    "price_per_sqft_usd",
                    "days_on_market",
                    "bedrooms"
                  ],
                  "properties": {
                    "list_price_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "square_feet": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_per_sqft_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "days_on_market": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "bedrooms": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "price_bands": {
                  "type": "object",
                  "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                  "additionalProperties": true
                },
                "market_positions": {
                  "type": "object",
                  "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                  "additionalProperties": true
                },
                "market_signals": {
                  "type": "object",
                  "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                  "additionalProperties": true
                },
                "segments": {
                  "type": "object",
                  "description": "Inventory groups by home type, postal code, and bedroom count.",
                  "additionalProperties": true
                },
                "decision_lenses": {
                  "type": "object",
                  "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                  "additionalProperties": true
                },
                "shortlist": {
                  "type": "array",
                  "description": "Listings ranked against the requested objective and the current report sample.",
                  "items": {
                    "type": "object",
                    "required": [
                      "rank",
                      "score",
                      "listing_id",
                      "address",
                      "price_usd",
                      "reasons"
                    ],
                    "properties": {
                      "rank": {
                        "type": "integer"
                      },
                      "score": {
                        "type": "number"
                      },
                      "listing_id": {
                        "type": "string"
                      },
                      "address": {
                        "type": "string"
                      },
                      "listing_url": {
                        "type": "string"
                      },
                      "price_usd": {
                        "type": "number"
                      },
                      "beds": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "baths": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "days_on_market": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "cohort": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Context against listings with the same normalized home type and bedroom count.",
                        "additionalProperties": true
                      },
                      "reasons": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "outliers": {
                  "type": "object",
                  "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                  "additionalProperties": true
                },
                "evidence_manifest": {
                  "type": "object",
                  "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                  "additionalProperties": true
                },
                "data_quality": {
                  "type": "object",
                  "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                  "additionalProperties": true
                },
                "methodology": {
                  "type": "object",
                  "description": "Transparent calculation and interpretation boundaries.",
                  "additionalProperties": true
                },
                "markdown": {
                  "type": "string",
                  "description": "Optional ready-to-render report."
                }
              },
              "additionalProperties": true
            },
            "listings": {
              "type": "array",
              "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "real-estate-market-intelligence-with-listings",
            "name": "Real Estate Intelligence + Evidence Bundle",
            "department": "Real Estate"
          },
          "requested": {
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "filters": {
              "zipCode": "77008",
              "priceMin": 200000,
              "priceMax": 750000,
              "bedsMin": 2,
              "bedsMax": 4,
              "bathsMin": 1.5,
              "bathsMax": 4,
              "sqftMin": 1000,
              "sqftMax": 3500
            },
            "inventoryClass": "home-listings",
            "listingType": "for_sale",
            "objective": "value",
            "maxListings": 100,
            "shortlistLimit": 10,
            "evidenceScope": "all-analyzed",
            "includeMarkdown": true,
            "smartScrape": false
          },
          "source": {
            "selected": "managed-public-listings",
            "inventoryClass": "home-listings",
            "routing": "managed-adapter",
            "resultFreshness": "live-run",
            "upstreamDetailsDisclosed": false
          },
          "report": {
            "title": "Houston, TX 77008 Real Estate Market Intelligence",
            "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008 with complete normalized evidence rows included.",
            "insights": [
              "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000."
            ],
            "sample": {
              "raw_count": 50,
              "duplicate_count": 3,
              "unique_count": 47,
              "eligible_count": 42,
              "excluded_count": 5
            },
            "benchmarks": {
              "list_price_usd": {
                "count": 42,
                "min": 239000,
                "p25": 389000,
                "median": 525000,
                "mean": 548120.24,
                "p75": 675000,
                "max": 750000
              }
            },
            "price_bands": {
              "basis": "current sample list price quartiles",
              "observed_count": 42,
              "bands": [
                {
                  "id": "under-p25",
                  "label": "Lower quartile",
                  "count": 11,
                  "share_pct": 26.2,
                  "lower_usd": null,
                  "upper_usd": 389000
                }
              ]
            },
            "market_positions": {
              "basis": {
                "median_price_usd": 525000,
                "median_price_per_sqft_usd": 248
              },
              "observed_count": 39,
              "positions": [
                {
                  "id": "relative-value",
                  "label": "Below both medians",
                  "count": 11,
                  "share_pct": 28.2
                }
              ]
            },
            "market_signals": {
              "below_median_price": {
                "count": 21,
                "share_pct": 50
              }
            },
            "segments": {
              "by_home_type": [
                {
                  "label": "SINGLE_FAMILY",
                  "count": 28,
                  "median_price_usd": 549500
                }
              ]
            },
            "decision_lenses": {
              "value": [
                {
                  "rank": 1,
                  "listing_id": "84007409",
                  "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                  "price_usd": 450000
                }
              ]
            },
            "shortlist": [
              {
                "rank": 1,
                "score": 94.2,
                "listing_id": "84007409",
                "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                "price_usd": 450000,
                "reasons": [
                  "Below both current sample medians"
                ]
              }
            ],
            "outliers": {
              "method": "1.5 x interquartile range review flags",
              "count": 0,
              "listings": []
            },
            "evidence_manifest": {
              "analyzed_listing_count": 42,
              "returned_listing_count": 42,
              "evidence_scope": "all-analyzed",
              "full_listing_rows_included": true,
              "shortlist_count": 10,
              "enforced_max_listing_cap": 100
            },
            "data_quality": {
              "confidence": "high",
              "warnings": [
                "Public listing inventory can change after this snapshot."
              ]
            },
            "methodology": {
              "calculation": "Deterministic descriptive statistics and relative within-sample ranking.",
              "ranking_objective": "value",
              "minimum_usable_listings": 5,
              "historical_trends_included": false,
              "appraisal_or_investment_advice": false
            },
            "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nComplete analyzed evidence included."
          },
          "listings": [
            {
              "listing_id": "84007409",
              "address": "1328 W 23rd St Unit A, Houston, TX 77008",
              "price_usd": 450000,
              "beds": 3,
              "baths": 4,
              "sqft": 2043,
              "price_per_sqft_usd": 220.26
            }
          ],
          "checkedAt": "2026-07-14T00:00:00.000Z"
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/prediction-markets/search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Prediction Market Search",
      "description": "Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.",
      "longDescription": "Purpose: Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nBest use: Use this when an agent needs search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"query\": \"AI agents\",\n  \"category\": \"technology\",\n  \"activeOnly\": true,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```",
      "category": "prediction-markets",
      "kind": "market-search-tool",
      "departmentId": "prediction-markets",
      "department": "Prediction Markets",
      "aisleId": "market-search",
      "aisle": "Market Search",
      "shelfId": "search",
      "shelf": "Search",
      "offeringId": "prediction-market-search",
      "offering": "Prediction Market Search",
      "pathIds": [
        "prediction-markets",
        "market-search",
        "search",
        "prediction-market-search"
      ],
      "pathLabels": [
        "Prediction Markets",
        "Market Search",
        "Search",
        "Prediction Market Search"
      ],
      "taxonomyPath": "prediction-markets.market-search.search.prediction-market-search",
      "layout": {
        "department": {
          "id": "prediction-markets",
          "name": "Prediction Markets"
        },
        "aisle": {
          "id": "market-search",
          "name": "Market Search"
        },
        "shelf": {
          "id": "search",
          "name": "Search"
        },
        "offering": {
          "id": "prediction-market-search",
          "name": "Prediction Market Search"
        },
        "pathIds": [
          "prediction-markets",
          "market-search",
          "search",
          "prediction-market-search"
        ],
        "pathLabels": [
          "Prediction Markets",
          "Market Search",
          "Search",
          "Prediction Market Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "prediction-markets",
        "market-search",
        "markets",
        "events",
        "probabilities",
        "public-data",
        "research",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 160,
            "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
          },
          "venue": {
            "type": "string",
            "enum": [
              "managed",
              "polymarket"
            ],
            "default": "managed",
            "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
          },
          "activeOnly": {
            "type": "boolean",
            "default": true,
            "description": "When true, return currently active, unresolved markets only."
          },
          "closed": {
            "type": "boolean",
            "default": false,
            "description": "Set true only when historical or resolved markets are acceptable."
          },
          "category": {
            "type": "string",
            "maxLength": 80,
            "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 25,
            "default": 10,
            "description": "Maximum normalized market rows to return."
          },
          "sort": {
            "type": "string",
            "enum": [
              "volume_desc",
              "liquidity_desc",
              "newest",
              "ending_soon"
            ],
            "default": "volume_desc",
            "description": "Sort order for returned markets."
          },
          "includeRules": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include capped market rule or description text."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "venue",
          "activeOnly",
          "closed",
          "category",
          "limit",
          "sort",
          "includeRules"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "venue",
            "type": "string",
            "required": false,
            "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
            "constraints": {
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed"
            }
          },
          {
            "name": "activeOnly",
            "type": "boolean",
            "required": false,
            "description": "When true, return currently active, unresolved markets only.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "closed",
            "type": "boolean",
            "required": false,
            "description": "Set true only when historical or resolved markets are acceptable.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "category",
            "type": "string",
            "required": false,
            "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum normalized market rows to return.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 25
            }
          },
          {
            "name": "sort",
            "type": "string",
            "required": false,
            "description": "Sort order for returned markets.",
            "constraints": {
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc"
            }
          },
          {
            "name": "includeRules",
            "type": "boolean",
            "required": false,
            "description": "Set true to include capped market rule or description text.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "AI agents",
          "category": "technology",
          "activeOnly": true,
          "limit": 10,
          "sort": "volume_desc",
          "includeRules": false
        }
      },
      "exampleRequest": {
        "query": "AI agents",
        "category": "technology",
        "activeOnly": true,
        "limit": 10,
        "sort": "volume_desc",
        "includeRules": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "marketFeed",
          "count",
          "markets",
          "limits",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True when the market search completed."
          },
          "tool": {
            "type": "object",
            "additionalProperties": true,
            "description": "AgentBodega tool metadata."
          },
          "requested": {
            "type": "object",
            "additionalProperties": true,
            "description": "Normalized filters and caps."
          },
          "marketFeed": {
            "type": "object",
            "additionalProperties": true,
            "description": "Provider-neutral feed metadata and public-data boundary."
          },
          "count": {
            "type": "integer",
            "description": "Number of normalized market rows returned."
          },
          "markets": {
            "type": "array",
            "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable market id."
                },
                "slug": {
                  "type": "string",
                  "description": "Stable market slug when available."
                },
                "title": {
                  "type": "string",
                  "description": "Market question or title."
                },
                "url": {
                  "type": "string",
                  "description": "Public market URL when available."
                },
                "venue": {
                  "type": "string",
                  "description": "Normalized venue label."
                },
                "active": {
                  "type": "boolean",
                  "description": "Whether the market is active."
                },
                "closed": {
                  "type": "boolean",
                  "description": "Whether the market is closed or resolved."
                },
                "endsAt": {
                  "type": "string",
                  "description": "Market end timestamp when available."
                },
                "volume": {
                  "type": "number",
                  "description": "Reported all-time volume when available."
                },
                "liquidity": {
                  "type": "number",
                  "description": "Reported liquidity when available."
                },
                "outcomes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "description": "Outcome labels and implied prices when available."
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Normalized category, event, or tag labels."
                },
                "rules": {
                  "type": "string",
                  "description": "Optional capped rules/description text when includeRules is true."
                }
              },
              "additionalProperties": true
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true,
            "description": "Published caps for this route."
          },
          "checkedAt": {
            "type": "string",
            "description": "Server-side ISO timestamp."
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "marketFeed": {
          "type": "managed-prediction-market-feed",
          "readOnly": true,
          "noTradeExecution": true
        },
        "count": 1,
        "markets": [
          {
            "title": "Will example event happen?",
            "outcomes": [
              {
                "label": "Yes",
                "price": 0.42
              },
              {
                "label": "No",
                "price": 0.58
              }
            ],
            "volume": 125000,
            "liquidity": 32000
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "AI agents",
                "category": "technology",
                "activeOnly": true,
                "limit": 10,
                "sort": "volume_desc",
                "includeRules": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "marketFeed": {
                  "type": "managed-prediction-market-feed",
                  "readOnly": true,
                  "noTradeExecution": true
                },
                "count": 1,
                "markets": [
                  {
                    "title": "Will example event happen?",
                    "outcomes": [
                      {
                        "label": "Yes",
                        "price": 0.42
                      },
                      {
                        "label": "No",
                        "price": 0.58
                      }
                    ],
                    "volume": 125000,
                    "liquidity": 32000
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/prediction-markets/search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
                      },
                      "venue": {
                        "type": "string",
                        "enum": [
                          "managed",
                          "polymarket"
                        ],
                        "default": "managed",
                        "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
                      },
                      "activeOnly": {
                        "type": "boolean",
                        "default": true,
                        "description": "When true, return currently active, unresolved markets only."
                      },
                      "closed": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true only when historical or resolved markets are acceptable."
                      },
                      "category": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 25,
                        "default": 10,
                        "description": "Maximum normalized market rows to return."
                      },
                      "sort": {
                        "type": "string",
                        "enum": [
                          "volume_desc",
                          "liquidity_desc",
                          "newest",
                          "ending_soon"
                        ],
                        "default": "volume_desc",
                        "description": "Sort order for returned markets."
                      },
                      "includeRules": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include capped market rule or description text."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "marketFeed",
                      "count",
                      "markets",
                      "limits",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True when the market search completed."
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "AgentBodega tool metadata."
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Normalized filters and caps."
                      },
                      "marketFeed": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Provider-neutral feed metadata and public-data boundary."
                      },
                      "count": {
                        "type": "integer",
                        "description": "Number of normalized market rows returned."
                      },
                      "markets": {
                        "type": "array",
                        "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "description": "Stable market id."
                            },
                            "slug": {
                              "type": "string",
                              "description": "Stable market slug when available."
                            },
                            "title": {
                              "type": "string",
                              "description": "Market question or title."
                            },
                            "url": {
                              "type": "string",
                              "description": "Public market URL when available."
                            },
                            "venue": {
                              "type": "string",
                              "description": "Normalized venue label."
                            },
                            "active": {
                              "type": "boolean",
                              "description": "Whether the market is active."
                            },
                            "closed": {
                              "type": "boolean",
                              "description": "Whether the market is closed or resolved."
                            },
                            "endsAt": {
                              "type": "string",
                              "description": "Market end timestamp when available."
                            },
                            "volume": {
                              "type": "number",
                              "description": "Reported all-time volume when available."
                            },
                            "liquidity": {
                              "type": "number",
                              "description": "Reported liquidity when available."
                            },
                            "outcomes": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "additionalProperties": true
                              },
                              "description": "Outcome labels and implied prices when available."
                            },
                            "categories": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "description": "Normalized category, event, or tag labels."
                            },
                            "rules": {
                              "type": "string",
                              "description": "Optional capped rules/description text when includeRules is true."
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Published caps for this route."
                      },
                      "checkedAt": {
                        "type": "string",
                        "description": "Server-side ISO timestamp."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "prediction-market-search",
            "url": "https://agentbodega.store/api/prediction-markets/search",
            "method": "POST",
            "description": "Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.",
            "longDescription": "Purpose: Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nBest use: Use this when an agent needs search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"query\": \"AI agents\",\n  \"category\": \"technology\",\n  \"activeOnly\": true,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Prediction Market Search",
            "category": "prediction-markets",
            "kind": "market-search-tool",
            "tags": [
              "prediction-markets",
              "market-search",
              "markets",
              "events",
              "probabilities",
              "public-data",
              "research",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "venue",
                "activeOnly",
                "closed",
                "category",
                "limit",
                "sort",
                "includeRules"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "venue",
                  "type": "string",
                  "required": false,
                  "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
                  "constraints": {
                    "enum": [
                      "managed",
                      "polymarket"
                    ],
                    "default": "managed"
                  }
                },
                {
                  "name": "activeOnly",
                  "type": "boolean",
                  "required": false,
                  "description": "When true, return currently active, unresolved markets only.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "closed",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true only when historical or resolved markets are acceptable.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "category",
                  "type": "string",
                  "required": false,
                  "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum normalized market rows to return.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 25
                  }
                },
                {
                  "name": "sort",
                  "type": "string",
                  "required": false,
                  "description": "Sort order for returned markets.",
                  "constraints": {
                    "enum": [
                      "volume_desc",
                      "liquidity_desc",
                      "newest",
                      "ending_soon"
                    ],
                    "default": "volume_desc"
                  }
                },
                {
                  "name": "includeRules",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include capped market rule or description text.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "AI agents",
                "category": "technology",
                "activeOnly": true,
                "limit": 10,
                "sort": "volume_desc",
                "includeRules": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "query": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
                },
                "venue": {
                  "type": "string",
                  "enum": [
                    "managed",
                    "polymarket"
                  ],
                  "default": "managed",
                  "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
                },
                "activeOnly": {
                  "type": "boolean",
                  "default": true,
                  "description": "When true, return currently active, unresolved markets only."
                },
                "closed": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true only when historical or resolved markets are acceptable."
                },
                "category": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 25,
                  "default": 10,
                  "description": "Maximum normalized market rows to return."
                },
                "sort": {
                  "type": "string",
                  "enum": [
                    "volume_desc",
                    "liquidity_desc",
                    "newest",
                    "ending_soon"
                  ],
                  "default": "volume_desc",
                  "description": "Sort order for returned markets."
                },
                "includeRules": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include capped market rule or description text."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "marketFeed",
                "count",
                "markets",
                "limits",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True when the market search completed."
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "AgentBodega tool metadata."
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Normalized filters and caps."
                },
                "marketFeed": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Provider-neutral feed metadata and public-data boundary."
                },
                "count": {
                  "type": "integer",
                  "description": "Number of normalized market rows returned."
                },
                "markets": {
                  "type": "array",
                  "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Stable market id."
                      },
                      "slug": {
                        "type": "string",
                        "description": "Stable market slug when available."
                      },
                      "title": {
                        "type": "string",
                        "description": "Market question or title."
                      },
                      "url": {
                        "type": "string",
                        "description": "Public market URL when available."
                      },
                      "venue": {
                        "type": "string",
                        "description": "Normalized venue label."
                      },
                      "active": {
                        "type": "boolean",
                        "description": "Whether the market is active."
                      },
                      "closed": {
                        "type": "boolean",
                        "description": "Whether the market is closed or resolved."
                      },
                      "endsAt": {
                        "type": "string",
                        "description": "Market end timestamp when available."
                      },
                      "volume": {
                        "type": "number",
                        "description": "Reported all-time volume when available."
                      },
                      "liquidity": {
                        "type": "number",
                        "description": "Reported liquidity when available."
                      },
                      "outcomes": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        },
                        "description": "Outcome labels and implied prices when available."
                      },
                      "categories": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "Normalized category, event, or tag labels."
                      },
                      "rules": {
                        "type": "string",
                        "description": "Optional capped rules/description text when includeRules is true."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Published caps for this route."
                },
                "checkedAt": {
                  "type": "string",
                  "description": "Server-side ISO timestamp."
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/prediction-markets/search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/prediction-markets/search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "prediction-markets",
        "kind": "market-search-tool",
        "taxonomy": {
          "departmentId": "prediction-markets",
          "department": "Prediction Markets",
          "aisleId": "market-search",
          "aisle": "Market Search",
          "shelfId": "search",
          "shelf": "Search",
          "offeringId": "prediction-market-search",
          "offering": "Prediction Market Search",
          "pathIds": [
            "prediction-markets",
            "market-search",
            "search",
            "prediction-market-search"
          ],
          "pathLabels": [
            "Prediction Markets",
            "Market Search",
            "Search",
            "Prediction Market Search"
          ],
          "taxonomyPath": "prediction-markets.market-search.search.prediction-market-search",
          "layout": {
            "department": {
              "id": "prediction-markets",
              "name": "Prediction Markets"
            },
            "aisle": {
              "id": "market-search",
              "name": "Market Search"
            },
            "shelf": {
              "id": "search",
              "name": "Search"
            },
            "offering": {
              "id": "prediction-market-search",
              "name": "Prediction Market Search"
            },
            "pathIds": [
              "prediction-markets",
              "market-search",
              "search",
              "prediction-market-search"
            ],
            "pathLabels": [
              "Prediction Markets",
              "Market Search",
              "Search",
              "Prediction Market Search"
            ]
          }
        },
        "description": {
          "short": "Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.",
          "full": "Purpose: Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nBest use: Use this when an agent needs search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"query\": \"AI agents\",\n  \"category\": \"technology\",\n  \"activeOnly\": true,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
            },
            "venue": {
              "type": "string",
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed",
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
            },
            "activeOnly": {
              "type": "boolean",
              "default": true,
              "description": "When true, return currently active, unresolved markets only."
            },
            "closed": {
              "type": "boolean",
              "default": false,
              "description": "Set true only when historical or resolved markets are acceptable."
            },
            "category": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 10,
              "description": "Maximum normalized market rows to return."
            },
            "sort": {
              "type": "string",
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc",
              "description": "Sort order for returned markets."
            },
            "includeRules": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include capped market rule or description text."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
            },
            "venue": {
              "type": "string",
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed",
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
            },
            "activeOnly": {
              "type": "boolean",
              "default": true,
              "description": "When true, return currently active, unresolved markets only."
            },
            "closed": {
              "type": "boolean",
              "default": false,
              "description": "Set true only when historical or resolved markets are acceptable."
            },
            "category": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 10,
              "description": "Maximum normalized market rows to return."
            },
            "sort": {
              "type": "string",
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc",
              "description": "Sort order for returned markets."
            },
            "includeRules": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include capped market rule or description text."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "venue",
            "activeOnly",
            "closed",
            "category",
            "limit",
            "sort",
            "includeRules"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "venue",
              "type": "string",
              "required": false,
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
              "constraints": {
                "enum": [
                  "managed",
                  "polymarket"
                ],
                "default": "managed"
              }
            },
            {
              "name": "activeOnly",
              "type": "boolean",
              "required": false,
              "description": "When true, return currently active, unresolved markets only.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "closed",
              "type": "boolean",
              "required": false,
              "description": "Set true only when historical or resolved markets are acceptable.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "category",
              "type": "string",
              "required": false,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum normalized market rows to return.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 25
              }
            },
            {
              "name": "sort",
              "type": "string",
              "required": false,
              "description": "Sort order for returned markets.",
              "constraints": {
                "enum": [
                  "volume_desc",
                  "liquidity_desc",
                  "newest",
                  "ending_soon"
                ],
                "default": "volume_desc"
              }
            },
            {
              "name": "includeRules",
              "type": "boolean",
              "required": false,
              "description": "Set true to include capped market rule or description text.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "AI agents",
            "category": "technology",
            "activeOnly": true,
            "limit": 10,
            "sort": "volume_desc",
            "includeRules": false
          }
        },
        "exampleRequest": {
          "query": "AI agents",
          "category": "technology",
          "activeOnly": true,
          "limit": 10,
          "sort": "volume_desc",
          "includeRules": false
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "marketFeed",
            "count",
            "markets",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the market search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized filters and caps."
            },
            "marketFeed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Provider-neutral feed metadata and public-data boundary."
            },
            "count": {
              "type": "integer",
              "description": "Number of normalized market rows returned."
            },
            "markets": {
              "type": "array",
              "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable market id."
                  },
                  "slug": {
                    "type": "string",
                    "description": "Stable market slug when available."
                  },
                  "title": {
                    "type": "string",
                    "description": "Market question or title."
                  },
                  "url": {
                    "type": "string",
                    "description": "Public market URL when available."
                  },
                  "venue": {
                    "type": "string",
                    "description": "Normalized venue label."
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Whether the market is active."
                  },
                  "closed": {
                    "type": "boolean",
                    "description": "Whether the market is closed or resolved."
                  },
                  "endsAt": {
                    "type": "string",
                    "description": "Market end timestamp when available."
                  },
                  "volume": {
                    "type": "number",
                    "description": "Reported all-time volume when available."
                  },
                  "liquidity": {
                    "type": "number",
                    "description": "Reported liquidity when available."
                  },
                  "outcomes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Outcome labels and implied prices when available."
                  },
                  "categories": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Normalized category, event, or tag labels."
                  },
                  "rules": {
                    "type": "string",
                    "description": "Optional capped rules/description text when includeRules is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp."
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "marketFeed",
            "count",
            "markets",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the market search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized filters and caps."
            },
            "marketFeed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Provider-neutral feed metadata and public-data boundary."
            },
            "count": {
              "type": "integer",
              "description": "Number of normalized market rows returned."
            },
            "markets": {
              "type": "array",
              "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable market id."
                  },
                  "slug": {
                    "type": "string",
                    "description": "Stable market slug when available."
                  },
                  "title": {
                    "type": "string",
                    "description": "Market question or title."
                  },
                  "url": {
                    "type": "string",
                    "description": "Public market URL when available."
                  },
                  "venue": {
                    "type": "string",
                    "description": "Normalized venue label."
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Whether the market is active."
                  },
                  "closed": {
                    "type": "boolean",
                    "description": "Whether the market is closed or resolved."
                  },
                  "endsAt": {
                    "type": "string",
                    "description": "Market end timestamp when available."
                  },
                  "volume": {
                    "type": "number",
                    "description": "Reported all-time volume when available."
                  },
                  "liquidity": {
                    "type": "number",
                    "description": "Reported liquidity when available."
                  },
                  "outcomes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Outcome labels and implied prices when available."
                  },
                  "categories": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Normalized category, event, or tag labels."
                  },
                  "rules": {
                    "type": "string",
                    "description": "Optional capped rules/description text when includeRules is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp."
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "marketFeed": {
            "type": "managed-prediction-market-feed",
            "readOnly": true,
            "noTradeExecution": true
          },
          "count": 1,
          "markets": [
            {
              "title": "Will example event happen?",
              "outcomes": [
                {
                  "label": "Yes",
                  "price": 0.42
                },
                {
                  "label": "No",
                  "price": 0.58
                }
              ],
              "volume": 125000,
              "liquidity": 32000
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/prediction-markets/listings",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Prediction Market Listings",
      "description": "Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.",
      "longDescription": "Purpose: Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nBest use: Use this when an agent needs return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"activeOnly\": true,\n  \"closed\": false,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```",
      "category": "prediction-markets",
      "kind": "market-listings-tool",
      "departmentId": "prediction-markets",
      "department": "Prediction Markets",
      "aisleId": "market-search",
      "aisle": "Market Search",
      "shelfId": "active-listings",
      "shelf": "Active Listings",
      "offeringId": "prediction-market-listings",
      "offering": "Prediction Market Listings",
      "pathIds": [
        "prediction-markets",
        "market-search",
        "active-listings",
        "prediction-market-listings"
      ],
      "pathLabels": [
        "Prediction Markets",
        "Market Search",
        "Active Listings",
        "Prediction Market Listings"
      ],
      "taxonomyPath": "prediction-markets.market-search.active-listings.prediction-market-listings",
      "layout": {
        "department": {
          "id": "prediction-markets",
          "name": "Prediction Markets"
        },
        "aisle": {
          "id": "market-search",
          "name": "Market Search"
        },
        "shelf": {
          "id": "active-listings",
          "name": "Active Listings"
        },
        "offering": {
          "id": "prediction-market-listings",
          "name": "Prediction Market Listings"
        },
        "pathIds": [
          "prediction-markets",
          "market-search",
          "active-listings",
          "prediction-market-listings"
        ],
        "pathLabels": [
          "Prediction Markets",
          "Market Search",
          "Active Listings",
          "Prediction Market Listings"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "prediction-markets",
        "market-listings",
        "markets",
        "events",
        "probabilities",
        "public-data",
        "research",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 160,
            "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
          },
          "venue": {
            "type": "string",
            "enum": [
              "managed",
              "polymarket"
            ],
            "default": "managed",
            "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
          },
          "activeOnly": {
            "type": "boolean",
            "default": true,
            "description": "When true, return currently active, unresolved markets only."
          },
          "closed": {
            "type": "boolean",
            "default": false,
            "description": "Set true only when historical or resolved markets are acceptable."
          },
          "category": {
            "type": "string",
            "maxLength": 80,
            "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 25,
            "default": 10,
            "description": "Maximum normalized market rows to return."
          },
          "sort": {
            "type": "string",
            "enum": [
              "volume_desc",
              "liquidity_desc",
              "newest",
              "ending_soon"
            ],
            "default": "volume_desc",
            "description": "Sort order for returned markets."
          },
          "includeRules": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include capped market rule or description text."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "venue",
          "activeOnly",
          "closed",
          "category",
          "limit",
          "sort",
          "includeRules"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "venue",
            "type": "string",
            "required": false,
            "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
            "constraints": {
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed"
            }
          },
          {
            "name": "activeOnly",
            "type": "boolean",
            "required": false,
            "description": "When true, return currently active, unresolved markets only.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "closed",
            "type": "boolean",
            "required": false,
            "description": "Set true only when historical or resolved markets are acceptable.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "category",
            "type": "string",
            "required": false,
            "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum normalized market rows to return.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 25
            }
          },
          {
            "name": "sort",
            "type": "string",
            "required": false,
            "description": "Sort order for returned markets.",
            "constraints": {
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc"
            }
          },
          {
            "name": "includeRules",
            "type": "boolean",
            "required": false,
            "description": "Set true to include capped market rule or description text.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "activeOnly": true,
          "closed": false,
          "limit": 10,
          "sort": "volume_desc",
          "includeRules": false
        }
      },
      "exampleRequest": {
        "activeOnly": true,
        "closed": false,
        "limit": 10,
        "sort": "volume_desc",
        "includeRules": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "marketFeed",
          "count",
          "markets",
          "limits",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True when the market search completed."
          },
          "tool": {
            "type": "object",
            "additionalProperties": true,
            "description": "AgentBodega tool metadata."
          },
          "requested": {
            "type": "object",
            "additionalProperties": true,
            "description": "Normalized filters and caps."
          },
          "marketFeed": {
            "type": "object",
            "additionalProperties": true,
            "description": "Provider-neutral feed metadata and public-data boundary."
          },
          "count": {
            "type": "integer",
            "description": "Number of normalized market rows returned."
          },
          "markets": {
            "type": "array",
            "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable market id."
                },
                "slug": {
                  "type": "string",
                  "description": "Stable market slug when available."
                },
                "title": {
                  "type": "string",
                  "description": "Market question or title."
                },
                "url": {
                  "type": "string",
                  "description": "Public market URL when available."
                },
                "venue": {
                  "type": "string",
                  "description": "Normalized venue label."
                },
                "active": {
                  "type": "boolean",
                  "description": "Whether the market is active."
                },
                "closed": {
                  "type": "boolean",
                  "description": "Whether the market is closed or resolved."
                },
                "endsAt": {
                  "type": "string",
                  "description": "Market end timestamp when available."
                },
                "volume": {
                  "type": "number",
                  "description": "Reported all-time volume when available."
                },
                "liquidity": {
                  "type": "number",
                  "description": "Reported liquidity when available."
                },
                "outcomes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "description": "Outcome labels and implied prices when available."
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Normalized category, event, or tag labels."
                },
                "rules": {
                  "type": "string",
                  "description": "Optional capped rules/description text when includeRules is true."
                }
              },
              "additionalProperties": true
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true,
            "description": "Published caps for this route."
          },
          "checkedAt": {
            "type": "string",
            "description": "Server-side ISO timestamp."
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "marketFeed": {
          "type": "managed-prediction-market-feed",
          "readOnly": true,
          "noTradeExecution": true
        },
        "count": 1,
        "markets": [
          {
            "title": "Top active example market",
            "outcomes": [
              {
                "label": "Yes",
                "price": 0.61
              },
              {
                "label": "No",
                "price": 0.39
              }
            ],
            "volume": 250000,
            "liquidity": 48000
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "activeOnly": true,
                "closed": false,
                "limit": 10,
                "sort": "volume_desc",
                "includeRules": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "marketFeed": {
                  "type": "managed-prediction-market-feed",
                  "readOnly": true,
                  "noTradeExecution": true
                },
                "count": 1,
                "markets": [
                  {
                    "title": "Top active example market",
                    "outcomes": [
                      {
                        "label": "Yes",
                        "price": 0.61
                      },
                      {
                        "label": "No",
                        "price": 0.39
                      }
                    ],
                    "volume": 250000,
                    "liquidity": 48000
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/prediction-markets/listings",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
                      },
                      "venue": {
                        "type": "string",
                        "enum": [
                          "managed",
                          "polymarket"
                        ],
                        "default": "managed",
                        "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
                      },
                      "activeOnly": {
                        "type": "boolean",
                        "default": true,
                        "description": "When true, return currently active, unresolved markets only."
                      },
                      "closed": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true only when historical or resolved markets are acceptable."
                      },
                      "category": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 25,
                        "default": 10,
                        "description": "Maximum normalized market rows to return."
                      },
                      "sort": {
                        "type": "string",
                        "enum": [
                          "volume_desc",
                          "liquidity_desc",
                          "newest",
                          "ending_soon"
                        ],
                        "default": "volume_desc",
                        "description": "Sort order for returned markets."
                      },
                      "includeRules": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include capped market rule or description text."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "marketFeed",
                      "count",
                      "markets",
                      "limits",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True when the market search completed."
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "AgentBodega tool metadata."
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Normalized filters and caps."
                      },
                      "marketFeed": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Provider-neutral feed metadata and public-data boundary."
                      },
                      "count": {
                        "type": "integer",
                        "description": "Number of normalized market rows returned."
                      },
                      "markets": {
                        "type": "array",
                        "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "description": "Stable market id."
                            },
                            "slug": {
                              "type": "string",
                              "description": "Stable market slug when available."
                            },
                            "title": {
                              "type": "string",
                              "description": "Market question or title."
                            },
                            "url": {
                              "type": "string",
                              "description": "Public market URL when available."
                            },
                            "venue": {
                              "type": "string",
                              "description": "Normalized venue label."
                            },
                            "active": {
                              "type": "boolean",
                              "description": "Whether the market is active."
                            },
                            "closed": {
                              "type": "boolean",
                              "description": "Whether the market is closed or resolved."
                            },
                            "endsAt": {
                              "type": "string",
                              "description": "Market end timestamp when available."
                            },
                            "volume": {
                              "type": "number",
                              "description": "Reported all-time volume when available."
                            },
                            "liquidity": {
                              "type": "number",
                              "description": "Reported liquidity when available."
                            },
                            "outcomes": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "additionalProperties": true
                              },
                              "description": "Outcome labels and implied prices when available."
                            },
                            "categories": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "description": "Normalized category, event, or tag labels."
                            },
                            "rules": {
                              "type": "string",
                              "description": "Optional capped rules/description text when includeRules is true."
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Published caps for this route."
                      },
                      "checkedAt": {
                        "type": "string",
                        "description": "Server-side ISO timestamp."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "prediction-market-listings",
            "url": "https://agentbodega.store/api/prediction-markets/listings",
            "method": "POST",
            "description": "Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.",
            "longDescription": "Purpose: Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nBest use: Use this when an agent needs return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"activeOnly\": true,\n  \"closed\": false,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Prediction Market Listings",
            "category": "prediction-markets",
            "kind": "market-listings-tool",
            "tags": [
              "prediction-markets",
              "market-listings",
              "markets",
              "events",
              "probabilities",
              "public-data",
              "research",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "venue",
                "activeOnly",
                "closed",
                "category",
                "limit",
                "sort",
                "includeRules"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "venue",
                  "type": "string",
                  "required": false,
                  "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
                  "constraints": {
                    "enum": [
                      "managed",
                      "polymarket"
                    ],
                    "default": "managed"
                  }
                },
                {
                  "name": "activeOnly",
                  "type": "boolean",
                  "required": false,
                  "description": "When true, return currently active, unresolved markets only.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "closed",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true only when historical or resolved markets are acceptable.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "category",
                  "type": "string",
                  "required": false,
                  "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum normalized market rows to return.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 25
                  }
                },
                {
                  "name": "sort",
                  "type": "string",
                  "required": false,
                  "description": "Sort order for returned markets.",
                  "constraints": {
                    "enum": [
                      "volume_desc",
                      "liquidity_desc",
                      "newest",
                      "ending_soon"
                    ],
                    "default": "volume_desc"
                  }
                },
                {
                  "name": "includeRules",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include capped market rule or description text.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "activeOnly": true,
                "closed": false,
                "limit": 10,
                "sort": "volume_desc",
                "includeRules": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "query": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
                },
                "venue": {
                  "type": "string",
                  "enum": [
                    "managed",
                    "polymarket"
                  ],
                  "default": "managed",
                  "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
                },
                "activeOnly": {
                  "type": "boolean",
                  "default": true,
                  "description": "When true, return currently active, unresolved markets only."
                },
                "closed": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true only when historical or resolved markets are acceptable."
                },
                "category": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 25,
                  "default": 10,
                  "description": "Maximum normalized market rows to return."
                },
                "sort": {
                  "type": "string",
                  "enum": [
                    "volume_desc",
                    "liquidity_desc",
                    "newest",
                    "ending_soon"
                  ],
                  "default": "volume_desc",
                  "description": "Sort order for returned markets."
                },
                "includeRules": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include capped market rule or description text."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "marketFeed",
                "count",
                "markets",
                "limits",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True when the market search completed."
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "AgentBodega tool metadata."
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Normalized filters and caps."
                },
                "marketFeed": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Provider-neutral feed metadata and public-data boundary."
                },
                "count": {
                  "type": "integer",
                  "description": "Number of normalized market rows returned."
                },
                "markets": {
                  "type": "array",
                  "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Stable market id."
                      },
                      "slug": {
                        "type": "string",
                        "description": "Stable market slug when available."
                      },
                      "title": {
                        "type": "string",
                        "description": "Market question or title."
                      },
                      "url": {
                        "type": "string",
                        "description": "Public market URL when available."
                      },
                      "venue": {
                        "type": "string",
                        "description": "Normalized venue label."
                      },
                      "active": {
                        "type": "boolean",
                        "description": "Whether the market is active."
                      },
                      "closed": {
                        "type": "boolean",
                        "description": "Whether the market is closed or resolved."
                      },
                      "endsAt": {
                        "type": "string",
                        "description": "Market end timestamp when available."
                      },
                      "volume": {
                        "type": "number",
                        "description": "Reported all-time volume when available."
                      },
                      "liquidity": {
                        "type": "number",
                        "description": "Reported liquidity when available."
                      },
                      "outcomes": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        },
                        "description": "Outcome labels and implied prices when available."
                      },
                      "categories": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "Normalized category, event, or tag labels."
                      },
                      "rules": {
                        "type": "string",
                        "description": "Optional capped rules/description text when includeRules is true."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Published caps for this route."
                },
                "checkedAt": {
                  "type": "string",
                  "description": "Server-side ISO timestamp."
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/prediction-markets/listings",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/prediction-markets/listings",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "prediction-markets",
        "kind": "market-listings-tool",
        "taxonomy": {
          "departmentId": "prediction-markets",
          "department": "Prediction Markets",
          "aisleId": "market-search",
          "aisle": "Market Search",
          "shelfId": "active-listings",
          "shelf": "Active Listings",
          "offeringId": "prediction-market-listings",
          "offering": "Prediction Market Listings",
          "pathIds": [
            "prediction-markets",
            "market-search",
            "active-listings",
            "prediction-market-listings"
          ],
          "pathLabels": [
            "Prediction Markets",
            "Market Search",
            "Active Listings",
            "Prediction Market Listings"
          ],
          "taxonomyPath": "prediction-markets.market-search.active-listings.prediction-market-listings",
          "layout": {
            "department": {
              "id": "prediction-markets",
              "name": "Prediction Markets"
            },
            "aisle": {
              "id": "market-search",
              "name": "Market Search"
            },
            "shelf": {
              "id": "active-listings",
              "name": "Active Listings"
            },
            "offering": {
              "id": "prediction-market-listings",
              "name": "Prediction Market Listings"
            },
            "pathIds": [
              "prediction-markets",
              "market-search",
              "active-listings",
              "prediction-market-listings"
            ],
            "pathLabels": [
              "Prediction Markets",
              "Market Search",
              "Active Listings",
              "Prediction Market Listings"
            ]
          }
        },
        "description": {
          "short": "Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.",
          "full": "Purpose: Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nBest use: Use this when an agent needs return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"activeOnly\": true,\n  \"closed\": false,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
            },
            "venue": {
              "type": "string",
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed",
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
            },
            "activeOnly": {
              "type": "boolean",
              "default": true,
              "description": "When true, return currently active, unresolved markets only."
            },
            "closed": {
              "type": "boolean",
              "default": false,
              "description": "Set true only when historical or resolved markets are acceptable."
            },
            "category": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 10,
              "description": "Maximum normalized market rows to return."
            },
            "sort": {
              "type": "string",
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc",
              "description": "Sort order for returned markets."
            },
            "includeRules": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include capped market rule or description text."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
            },
            "venue": {
              "type": "string",
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed",
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
            },
            "activeOnly": {
              "type": "boolean",
              "default": true,
              "description": "When true, return currently active, unresolved markets only."
            },
            "closed": {
              "type": "boolean",
              "default": false,
              "description": "Set true only when historical or resolved markets are acceptable."
            },
            "category": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 10,
              "description": "Maximum normalized market rows to return."
            },
            "sort": {
              "type": "string",
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc",
              "description": "Sort order for returned markets."
            },
            "includeRules": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include capped market rule or description text."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "venue",
            "activeOnly",
            "closed",
            "category",
            "limit",
            "sort",
            "includeRules"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "venue",
              "type": "string",
              "required": false,
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
              "constraints": {
                "enum": [
                  "managed",
                  "polymarket"
                ],
                "default": "managed"
              }
            },
            {
              "name": "activeOnly",
              "type": "boolean",
              "required": false,
              "description": "When true, return currently active, unresolved markets only.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "closed",
              "type": "boolean",
              "required": false,
              "description": "Set true only when historical or resolved markets are acceptable.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "category",
              "type": "string",
              "required": false,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum normalized market rows to return.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 25
              }
            },
            {
              "name": "sort",
              "type": "string",
              "required": false,
              "description": "Sort order for returned markets.",
              "constraints": {
                "enum": [
                  "volume_desc",
                  "liquidity_desc",
                  "newest",
                  "ending_soon"
                ],
                "default": "volume_desc"
              }
            },
            {
              "name": "includeRules",
              "type": "boolean",
              "required": false,
              "description": "Set true to include capped market rule or description text.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "activeOnly": true,
            "closed": false,
            "limit": 10,
            "sort": "volume_desc",
            "includeRules": false
          }
        },
        "exampleRequest": {
          "activeOnly": true,
          "closed": false,
          "limit": 10,
          "sort": "volume_desc",
          "includeRules": false
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "marketFeed",
            "count",
            "markets",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the market search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized filters and caps."
            },
            "marketFeed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Provider-neutral feed metadata and public-data boundary."
            },
            "count": {
              "type": "integer",
              "description": "Number of normalized market rows returned."
            },
            "markets": {
              "type": "array",
              "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable market id."
                  },
                  "slug": {
                    "type": "string",
                    "description": "Stable market slug when available."
                  },
                  "title": {
                    "type": "string",
                    "description": "Market question or title."
                  },
                  "url": {
                    "type": "string",
                    "description": "Public market URL when available."
                  },
                  "venue": {
                    "type": "string",
                    "description": "Normalized venue label."
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Whether the market is active."
                  },
                  "closed": {
                    "type": "boolean",
                    "description": "Whether the market is closed or resolved."
                  },
                  "endsAt": {
                    "type": "string",
                    "description": "Market end timestamp when available."
                  },
                  "volume": {
                    "type": "number",
                    "description": "Reported all-time volume when available."
                  },
                  "liquidity": {
                    "type": "number",
                    "description": "Reported liquidity when available."
                  },
                  "outcomes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Outcome labels and implied prices when available."
                  },
                  "categories": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Normalized category, event, or tag labels."
                  },
                  "rules": {
                    "type": "string",
                    "description": "Optional capped rules/description text when includeRules is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp."
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "marketFeed",
            "count",
            "markets",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the market search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized filters and caps."
            },
            "marketFeed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Provider-neutral feed metadata and public-data boundary."
            },
            "count": {
              "type": "integer",
              "description": "Number of normalized market rows returned."
            },
            "markets": {
              "type": "array",
              "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable market id."
                  },
                  "slug": {
                    "type": "string",
                    "description": "Stable market slug when available."
                  },
                  "title": {
                    "type": "string",
                    "description": "Market question or title."
                  },
                  "url": {
                    "type": "string",
                    "description": "Public market URL when available."
                  },
                  "venue": {
                    "type": "string",
                    "description": "Normalized venue label."
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Whether the market is active."
                  },
                  "closed": {
                    "type": "boolean",
                    "description": "Whether the market is closed or resolved."
                  },
                  "endsAt": {
                    "type": "string",
                    "description": "Market end timestamp when available."
                  },
                  "volume": {
                    "type": "number",
                    "description": "Reported all-time volume when available."
                  },
                  "liquidity": {
                    "type": "number",
                    "description": "Reported liquidity when available."
                  },
                  "outcomes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Outcome labels and implied prices when available."
                  },
                  "categories": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Normalized category, event, or tag labels."
                  },
                  "rules": {
                    "type": "string",
                    "description": "Optional capped rules/description text when includeRules is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp."
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "marketFeed": {
            "type": "managed-prediction-market-feed",
            "readOnly": true,
            "noTradeExecution": true
          },
          "count": 1,
          "markets": [
            {
              "title": "Top active example market",
              "outcomes": [
                {
                  "label": "Yes",
                  "price": 0.61
                },
                {
                  "label": "No",
                  "price": 0.39
                }
              ],
              "volume": 250000,
              "liquidity": 48000
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/social-media/x/user-profile",
      "type": "http",
      "x402Version": 2,
      "serviceName": "X User Profile Lookup",
      "description": "Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.",
      "longDescription": "Purpose: Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nBest use: Use this when an agent needs look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: none.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\"\n}\n```",
      "category": "social-media",
      "kind": "social-data-tool",
      "departmentId": "social-media",
      "department": "Social Media",
      "aisleId": "x-twitter",
      "aisle": "X/Twitter",
      "shelfId": "profiles",
      "shelf": "Profiles",
      "offeringId": "x-user-profile",
      "offering": "X User Profile Lookup",
      "pathIds": [
        "social-media",
        "x-twitter",
        "profiles",
        "x-user-profile"
      ],
      "pathLabels": [
        "Social Media",
        "X/Twitter",
        "Profiles",
        "X User Profile Lookup"
      ],
      "taxonomyPath": "social-media.x-twitter.profiles.x-user-profile",
      "layout": {
        "department": {
          "id": "social-media",
          "name": "Social Media"
        },
        "aisle": {
          "id": "x-twitter",
          "name": "X/Twitter"
        },
        "shelf": {
          "id": "profiles",
          "name": "Profiles"
        },
        "offering": {
          "id": "x-user-profile",
          "name": "X User Profile Lookup"
        },
        "pathIds": [
          "social-media",
          "x-twitter",
          "profiles",
          "x-user-profile"
        ],
        "pathLabels": [
          "Social Media",
          "X/Twitter",
          "Profiles",
          "X User Profile Lookup"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "social-media",
        "x",
        "twitter",
        "profile",
        "creator-research",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "30000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "30000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "username"
        ],
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Public username or profile URL. Leading @ is accepted and normalized."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "username"
        ],
        "optional": [],
        "fields": [
          {
            "name": "username",
            "type": "string",
            "required": true,
            "description": "Public username or profile URL. Leading @ is accepted and normalized.",
            "constraints": {
              "minLength": 1,
              "maxLength": 80
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "username": "OpenAI"
        }
      },
      "exampleRequest": {
        "username": "OpenAI"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "profile": {
            "type": "object",
            "additionalProperties": true
          },
          "tweet": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result_count": {
            "type": "integer"
          },
          "meta": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "x-user-profile",
          "name": "X User Profile Lookup",
          "department": "Social Media"
        },
        "requested": {
          "username": "OpenAI"
        },
        "profile": {
          "id": "44196397",
          "username": "OpenAI",
          "name": "OpenAI",
          "verified": true,
          "metrics": {
            "followers": 1000000,
            "following": 0,
            "posts": 1000
          }
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "username": "OpenAI"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "x-user-profile",
                  "name": "X User Profile Lookup",
                  "department": "Social Media"
                },
                "requested": {
                  "username": "OpenAI"
                },
                "profile": {
                  "id": "44196397",
                  "username": "OpenAI",
                  "name": "OpenAI",
                  "verified": true,
                  "metrics": {
                    "followers": 1000000,
                    "following": 0,
                    "posts": 1000
                  }
                }
              }
            }
          },
          "routeTemplate": "/api/social-media/x/user-profile",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "username"
                    ],
                    "properties": {
                      "username": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80,
                        "description": "Public username or profile URL. Leading @ is accepted and normalized."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "profile": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "tweet": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result_count": {
                        "type": "integer"
                      },
                      "meta": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x-user-profile",
            "url": "https://agentbodega.store/api/social-media/x/user-profile",
            "method": "POST",
            "description": "Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.",
            "longDescription": "Purpose: Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nBest use: Use this when an agent needs look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: none.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "X User Profile Lookup",
            "category": "social-media",
            "kind": "social-data-tool",
            "tags": [
              "social-media",
              "x",
              "twitter",
              "profile",
              "creator-research",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "username"
              ],
              "optional": [],
              "fields": [
                {
                  "name": "username",
                  "type": "string",
                  "required": true,
                  "description": "Public username or profile URL. Leading @ is accepted and normalized.",
                  "constraints": {
                    "minLength": 1,
                    "maxLength": 80
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "username": "OpenAI"
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "username"
              ],
              "properties": {
                "username": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 80,
                  "description": "Public username or profile URL. Leading @ is accepted and normalized."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "profile": {
                  "type": "object",
                  "additionalProperties": true
                },
                "tweet": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result_count": {
                  "type": "integer"
                },
                "meta": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.03"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.03",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/social-media/x/user-profile",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.03"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/social-media/x/user-profile",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "social-media",
        "kind": "social-data-tool",
        "taxonomy": {
          "departmentId": "social-media",
          "department": "Social Media",
          "aisleId": "x-twitter",
          "aisle": "X/Twitter",
          "shelfId": "profiles",
          "shelf": "Profiles",
          "offeringId": "x-user-profile",
          "offering": "X User Profile Lookup",
          "pathIds": [
            "social-media",
            "x-twitter",
            "profiles",
            "x-user-profile"
          ],
          "pathLabels": [
            "Social Media",
            "X/Twitter",
            "Profiles",
            "X User Profile Lookup"
          ],
          "taxonomyPath": "social-media.x-twitter.profiles.x-user-profile",
          "layout": {
            "department": {
              "id": "social-media",
              "name": "Social Media"
            },
            "aisle": {
              "id": "x-twitter",
              "name": "X/Twitter"
            },
            "shelf": {
              "id": "profiles",
              "name": "Profiles"
            },
            "offering": {
              "id": "x-user-profile",
              "name": "X User Profile Lookup"
            },
            "pathIds": [
              "social-media",
              "x-twitter",
              "profiles",
              "x-user-profile"
            ],
            "pathLabels": [
              "Social Media",
              "X/Twitter",
              "Profiles",
              "X User Profile Lookup"
            ]
          }
        },
        "description": {
          "short": "Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.",
          "full": "Purpose: Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nBest use: Use this when an agent needs look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: none.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "username"
          ],
          "properties": {
            "username": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Public username or profile URL. Leading @ is accepted and normalized."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "username"
          ],
          "properties": {
            "username": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Public username or profile URL. Leading @ is accepted and normalized."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "username"
          ],
          "optional": [],
          "fields": [
            {
              "name": "username",
              "type": "string",
              "required": true,
              "description": "Public username or profile URL. Leading @ is accepted and normalized.",
              "constraints": {
                "minLength": 1,
                "maxLength": 80
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "username": "OpenAI"
          }
        },
        "exampleRequest": {
          "username": "OpenAI"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "x-user-profile",
            "name": "X User Profile Lookup",
            "department": "Social Media"
          },
          "requested": {
            "username": "OpenAI"
          },
          "profile": {
            "id": "44196397",
            "username": "OpenAI",
            "name": "OpenAI",
            "verified": true,
            "metrics": {
              "followers": 1000000,
              "following": 0,
              "posts": 1000
            }
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/social-media/x/tweet",
      "type": "http",
      "x402Version": 2,
      "serviceName": "X Post Lookup",
      "description": "Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.",
      "longDescription": "Purpose: Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: tweetId, tweetUrl.\n\nAccepted fields:\n- tweetId (optional, string): Numeric public post id. Required unless tweetUrl is supplied.\n- tweetUrl (optional, string): Public post URL. Required unless tweetId is supplied. Constraints: format: uri; max length: 300.\n\nExample request body:\n```json\n{\n  \"tweetId\": \"20\"\n}\n```",
      "category": "social-media",
      "kind": "social-data-tool",
      "departmentId": "social-media",
      "department": "Social Media",
      "aisleId": "x-twitter",
      "aisle": "X/Twitter",
      "shelfId": "posts",
      "shelf": "Posts",
      "offeringId": "x-tweet",
      "offering": "X Post Lookup",
      "pathIds": [
        "social-media",
        "x-twitter",
        "posts",
        "x-tweet"
      ],
      "pathLabels": [
        "Social Media",
        "X/Twitter",
        "Posts",
        "X Post Lookup"
      ],
      "taxonomyPath": "social-media.x-twitter.posts.x-tweet",
      "layout": {
        "department": {
          "id": "social-media",
          "name": "Social Media"
        },
        "aisle": {
          "id": "x-twitter",
          "name": "X/Twitter"
        },
        "shelf": {
          "id": "posts",
          "name": "Posts"
        },
        "offering": {
          "id": "x-tweet",
          "name": "X Post Lookup"
        },
        "pathIds": [
          "social-media",
          "x-twitter",
          "posts",
          "x-tweet"
        ],
        "pathLabels": [
          "Social Media",
          "X/Twitter",
          "Posts",
          "X Post Lookup"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "social-media",
        "x",
        "twitter",
        "tweet",
        "post",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "20000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "20000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "anyOf": [
          {
            "required": [
              "tweetId"
            ]
          },
          {
            "required": [
              "tweetUrl"
            ]
          }
        ],
        "properties": {
          "tweetId": {
            "type": "string",
            "pattern": "^[0-9]{1,30}$",
            "description": "Numeric public post id. Required unless tweetUrl is supplied."
          },
          "tweetUrl": {
            "type": "string",
            "format": "uri",
            "maxLength": 300,
            "description": "Public post URL. Required unless tweetId is supplied."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "tweetId",
          "tweetUrl"
        ],
        "fields": [
          {
            "name": "tweetId",
            "type": "string",
            "required": false,
            "description": "Numeric public post id. Required unless tweetUrl is supplied."
          },
          {
            "name": "tweetUrl",
            "type": "string",
            "required": false,
            "description": "Public post URL. Required unless tweetId is supplied.",
            "constraints": {
              "format": "uri",
              "maxLength": 300
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "tweetId": "20"
        }
      },
      "exampleRequest": {
        "tweetId": "20"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "profile": {
            "type": "object",
            "additionalProperties": true
          },
          "tweet": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result_count": {
            "type": "integer"
          },
          "meta": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "x-tweet",
          "name": "X Post Lookup",
          "department": "Social Media"
        },
        "requested": {
          "tweetId": "20"
        },
        "tweet": {
          "id": "20",
          "text": "Normalized public post text",
          "author": {
            "username": "jack"
          },
          "metrics": {
            "likes": 0,
            "reposts": 0,
            "replies": 0
          }
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "tweetId": "20"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "x-tweet",
                  "name": "X Post Lookup",
                  "department": "Social Media"
                },
                "requested": {
                  "tweetId": "20"
                },
                "tweet": {
                  "id": "20",
                  "text": "Normalized public post text",
                  "author": {
                    "username": "jack"
                  },
                  "metrics": {
                    "likes": 0,
                    "reposts": 0,
                    "replies": 0
                  }
                }
              }
            }
          },
          "routeTemplate": "/api/social-media/x/tweet",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "anyOf": [
                      {
                        "required": [
                          "tweetId"
                        ]
                      },
                      {
                        "required": [
                          "tweetUrl"
                        ]
                      }
                    ],
                    "properties": {
                      "tweetId": {
                        "type": "string",
                        "pattern": "^[0-9]{1,30}$",
                        "description": "Numeric public post id. Required unless tweetUrl is supplied."
                      },
                      "tweetUrl": {
                        "type": "string",
                        "format": "uri",
                        "maxLength": 300,
                        "description": "Public post URL. Required unless tweetId is supplied."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "profile": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "tweet": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result_count": {
                        "type": "integer"
                      },
                      "meta": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x-tweet",
            "url": "https://agentbodega.store/api/social-media/x/tweet",
            "method": "POST",
            "description": "Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.",
            "longDescription": "Purpose: Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: tweetId, tweetUrl.\n\nAccepted fields:\n- tweetId (optional, string): Numeric public post id. Required unless tweetUrl is supplied.\n- tweetUrl (optional, string): Public post URL. Required unless tweetId is supplied. Constraints: format: uri; max length: 300.\n\nExample request body:\n```json\n{\n  \"tweetId\": \"20\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "X Post Lookup",
            "category": "social-media",
            "kind": "social-data-tool",
            "tags": [
              "social-media",
              "x",
              "twitter",
              "tweet",
              "post",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "tweetId",
                "tweetUrl"
              ],
              "fields": [
                {
                  "name": "tweetId",
                  "type": "string",
                  "required": false,
                  "description": "Numeric public post id. Required unless tweetUrl is supplied."
                },
                {
                  "name": "tweetUrl",
                  "type": "string",
                  "required": false,
                  "description": "Public post URL. Required unless tweetId is supplied.",
                  "constraints": {
                    "format": "uri",
                    "maxLength": 300
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "tweetId": "20"
              }
            },
            "inputSchema": {
              "type": "object",
              "anyOf": [
                {
                  "required": [
                    "tweetId"
                  ]
                },
                {
                  "required": [
                    "tweetUrl"
                  ]
                }
              ],
              "properties": {
                "tweetId": {
                  "type": "string",
                  "pattern": "^[0-9]{1,30}$",
                  "description": "Numeric public post id. Required unless tweetUrl is supplied."
                },
                "tweetUrl": {
                  "type": "string",
                  "format": "uri",
                  "maxLength": 300,
                  "description": "Public post URL. Required unless tweetId is supplied."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "profile": {
                  "type": "object",
                  "additionalProperties": true
                },
                "tweet": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result_count": {
                  "type": "integer"
                },
                "meta": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.02"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.02",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/social-media/x/tweet",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.02"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/social-media/x/tweet",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "social-media",
        "kind": "social-data-tool",
        "taxonomy": {
          "departmentId": "social-media",
          "department": "Social Media",
          "aisleId": "x-twitter",
          "aisle": "X/Twitter",
          "shelfId": "posts",
          "shelf": "Posts",
          "offeringId": "x-tweet",
          "offering": "X Post Lookup",
          "pathIds": [
            "social-media",
            "x-twitter",
            "posts",
            "x-tweet"
          ],
          "pathLabels": [
            "Social Media",
            "X/Twitter",
            "Posts",
            "X Post Lookup"
          ],
          "taxonomyPath": "social-media.x-twitter.posts.x-tweet",
          "layout": {
            "department": {
              "id": "social-media",
              "name": "Social Media"
            },
            "aisle": {
              "id": "x-twitter",
              "name": "X/Twitter"
            },
            "shelf": {
              "id": "posts",
              "name": "Posts"
            },
            "offering": {
              "id": "x-tweet",
              "name": "X Post Lookup"
            },
            "pathIds": [
              "social-media",
              "x-twitter",
              "posts",
              "x-tweet"
            ],
            "pathLabels": [
              "Social Media",
              "X/Twitter",
              "Posts",
              "X Post Lookup"
            ]
          }
        },
        "description": {
          "short": "Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.",
          "full": "Purpose: Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: tweetId, tweetUrl.\n\nAccepted fields:\n- tweetId (optional, string): Numeric public post id. Required unless tweetUrl is supplied.\n- tweetUrl (optional, string): Public post URL. Required unless tweetId is supplied. Constraints: format: uri; max length: 300.\n\nExample request body:\n```json\n{\n  \"tweetId\": \"20\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "tweetId"
              ]
            },
            {
              "required": [
                "tweetUrl"
              ]
            }
          ],
          "properties": {
            "tweetId": {
              "type": "string",
              "pattern": "^[0-9]{1,30}$",
              "description": "Numeric public post id. Required unless tweetUrl is supplied."
            },
            "tweetUrl": {
              "type": "string",
              "format": "uri",
              "maxLength": 300,
              "description": "Public post URL. Required unless tweetId is supplied."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "tweetId"
              ]
            },
            {
              "required": [
                "tweetUrl"
              ]
            }
          ],
          "properties": {
            "tweetId": {
              "type": "string",
              "pattern": "^[0-9]{1,30}$",
              "description": "Numeric public post id. Required unless tweetUrl is supplied."
            },
            "tweetUrl": {
              "type": "string",
              "format": "uri",
              "maxLength": 300,
              "description": "Public post URL. Required unless tweetId is supplied."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "tweetId",
            "tweetUrl"
          ],
          "fields": [
            {
              "name": "tweetId",
              "type": "string",
              "required": false,
              "description": "Numeric public post id. Required unless tweetUrl is supplied."
            },
            {
              "name": "tweetUrl",
              "type": "string",
              "required": false,
              "description": "Public post URL. Required unless tweetId is supplied.",
              "constraints": {
                "format": "uri",
                "maxLength": 300
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "tweetId": "20"
          }
        },
        "exampleRequest": {
          "tweetId": "20"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "x-tweet",
            "name": "X Post Lookup",
            "department": "Social Media"
          },
          "requested": {
            "tweetId": "20"
          },
          "tweet": {
            "id": "20",
            "text": "Normalized public post text",
            "author": {
              "username": "jack"
            },
            "metrics": {
              "likes": 0,
              "reposts": 0,
              "replies": 0
            }
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/social-media/x/user-timeline",
      "type": "http",
      "x402Version": 2,
      "serviceName": "X User Timeline",
      "description": "Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.",
      "longDescription": "Purpose: Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: maxResults.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n- maxResults (optional, integer): Maximum recent posts to return. Constraints: default: 20; min: 1; max: 100.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\",\n  \"maxResults\": 5\n}\n```",
      "category": "social-media",
      "kind": "social-data-tool",
      "departmentId": "social-media",
      "department": "Social Media",
      "aisleId": "x-twitter",
      "aisle": "X/Twitter",
      "shelfId": "timelines",
      "shelf": "Timelines",
      "offeringId": "x-user-timeline",
      "offering": "X User Timeline",
      "pathIds": [
        "social-media",
        "x-twitter",
        "timelines",
        "x-user-timeline"
      ],
      "pathLabels": [
        "Social Media",
        "X/Twitter",
        "Timelines",
        "X User Timeline"
      ],
      "taxonomyPath": "social-media.x-twitter.timelines.x-user-timeline",
      "layout": {
        "department": {
          "id": "social-media",
          "name": "Social Media"
        },
        "aisle": {
          "id": "x-twitter",
          "name": "X/Twitter"
        },
        "shelf": {
          "id": "timelines",
          "name": "Timelines"
        },
        "offering": {
          "id": "x-user-timeline",
          "name": "X User Timeline"
        },
        "pathIds": [
          "social-media",
          "x-twitter",
          "timelines",
          "x-user-timeline"
        ],
        "pathLabels": [
          "Social Media",
          "X/Twitter",
          "Timelines",
          "X User Timeline"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "social-media",
        "x",
        "twitter",
        "timeline",
        "creator-research",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "50000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "50000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "username"
        ],
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Public username or profile URL. Leading @ is accepted and normalized."
          },
          "maxResults": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Maximum recent posts to return."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "username"
        ],
        "optional": [
          "maxResults"
        ],
        "fields": [
          {
            "name": "username",
            "type": "string",
            "required": true,
            "description": "Public username or profile URL. Leading @ is accepted and normalized.",
            "constraints": {
              "minLength": 1,
              "maxLength": 80
            }
          },
          {
            "name": "maxResults",
            "type": "integer",
            "required": false,
            "description": "Maximum recent posts to return.",
            "constraints": {
              "default": 20,
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "username": "OpenAI",
          "maxResults": 5
        }
      },
      "exampleRequest": {
        "username": "OpenAI",
        "maxResults": 5
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "profile": {
            "type": "object",
            "additionalProperties": true
          },
          "tweet": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result_count": {
            "type": "integer"
          },
          "meta": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "x-user-timeline",
          "name": "X User Timeline",
          "department": "Social Media"
        },
        "requested": {
          "username": "OpenAI",
          "maxResults": 5
        },
        "result_count": 5,
        "results": [
          {
            "id": "1110302988",
            "text": "Normalized public post text",
            "author": {
              "username": "OpenAI"
            },
            "metrics": {
              "likes": 10,
              "reposts": 2,
              "replies": 1
            }
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "username": "OpenAI",
                "maxResults": 5
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "x-user-timeline",
                  "name": "X User Timeline",
                  "department": "Social Media"
                },
                "requested": {
                  "username": "OpenAI",
                  "maxResults": 5
                },
                "result_count": 5,
                "results": [
                  {
                    "id": "1110302988",
                    "text": "Normalized public post text",
                    "author": {
                      "username": "OpenAI"
                    },
                    "metrics": {
                      "likes": 10,
                      "reposts": 2,
                      "replies": 1
                    }
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/social-media/x/user-timeline",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "username"
                    ],
                    "properties": {
                      "username": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80,
                        "description": "Public username or profile URL. Leading @ is accepted and normalized."
                      },
                      "maxResults": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100,
                        "default": 20,
                        "description": "Maximum recent posts to return."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "profile": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "tweet": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result_count": {
                        "type": "integer"
                      },
                      "meta": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x-user-timeline",
            "url": "https://agentbodega.store/api/social-media/x/user-timeline",
            "method": "POST",
            "description": "Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.",
            "longDescription": "Purpose: Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: maxResults.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n- maxResults (optional, integer): Maximum recent posts to return. Constraints: default: 20; min: 1; max: 100.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\",\n  \"maxResults\": 5\n}\n```",
            "mimeType": "application/json",
            "serviceName": "X User Timeline",
            "category": "social-media",
            "kind": "social-data-tool",
            "tags": [
              "social-media",
              "x",
              "twitter",
              "timeline",
              "creator-research",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "username"
              ],
              "optional": [
                "maxResults"
              ],
              "fields": [
                {
                  "name": "username",
                  "type": "string",
                  "required": true,
                  "description": "Public username or profile URL. Leading @ is accepted and normalized.",
                  "constraints": {
                    "minLength": 1,
                    "maxLength": 80
                  }
                },
                {
                  "name": "maxResults",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent posts to return.",
                  "constraints": {
                    "default": 20,
                    "minimum": 1,
                    "maximum": 100
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "username": "OpenAI",
                "maxResults": 5
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "username"
              ],
              "properties": {
                "username": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 80,
                  "description": "Public username or profile URL. Leading @ is accepted and normalized."
                },
                "maxResults": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100,
                  "default": 20,
                  "description": "Maximum recent posts to return."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "profile": {
                  "type": "object",
                  "additionalProperties": true
                },
                "tweet": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result_count": {
                  "type": "integer"
                },
                "meta": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.05"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.05",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/social-media/x/user-timeline",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.05"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/social-media/x/user-timeline",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "social-media",
        "kind": "social-data-tool",
        "taxonomy": {
          "departmentId": "social-media",
          "department": "Social Media",
          "aisleId": "x-twitter",
          "aisle": "X/Twitter",
          "shelfId": "timelines",
          "shelf": "Timelines",
          "offeringId": "x-user-timeline",
          "offering": "X User Timeline",
          "pathIds": [
            "social-media",
            "x-twitter",
            "timelines",
            "x-user-timeline"
          ],
          "pathLabels": [
            "Social Media",
            "X/Twitter",
            "Timelines",
            "X User Timeline"
          ],
          "taxonomyPath": "social-media.x-twitter.timelines.x-user-timeline",
          "layout": {
            "department": {
              "id": "social-media",
              "name": "Social Media"
            },
            "aisle": {
              "id": "x-twitter",
              "name": "X/Twitter"
            },
            "shelf": {
              "id": "timelines",
              "name": "Timelines"
            },
            "offering": {
              "id": "x-user-timeline",
              "name": "X User Timeline"
            },
            "pathIds": [
              "social-media",
              "x-twitter",
              "timelines",
              "x-user-timeline"
            ],
            "pathLabels": [
              "Social Media",
              "X/Twitter",
              "Timelines",
              "X User Timeline"
            ]
          }
        },
        "description": {
          "short": "Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.",
          "full": "Purpose: Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: maxResults.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n- maxResults (optional, integer): Maximum recent posts to return. Constraints: default: 20; min: 1; max: 100.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\",\n  \"maxResults\": 5\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "username"
          ],
          "properties": {
            "username": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Public username or profile URL. Leading @ is accepted and normalized."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "description": "Maximum recent posts to return."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "username"
          ],
          "properties": {
            "username": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Public username or profile URL. Leading @ is accepted and normalized."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "description": "Maximum recent posts to return."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "username"
          ],
          "optional": [
            "maxResults"
          ],
          "fields": [
            {
              "name": "username",
              "type": "string",
              "required": true,
              "description": "Public username or profile URL. Leading @ is accepted and normalized.",
              "constraints": {
                "minLength": 1,
                "maxLength": 80
              }
            },
            {
              "name": "maxResults",
              "type": "integer",
              "required": false,
              "description": "Maximum recent posts to return.",
              "constraints": {
                "default": 20,
                "minimum": 1,
                "maximum": 100
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "username": "OpenAI",
            "maxResults": 5
          }
        },
        "exampleRequest": {
          "username": "OpenAI",
          "maxResults": 5
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "x-user-timeline",
            "name": "X User Timeline",
            "department": "Social Media"
          },
          "requested": {
            "username": "OpenAI",
            "maxResults": 5
          },
          "result_count": 5,
          "results": [
            {
              "id": "1110302988",
              "text": "Normalized public post text",
              "author": {
                "username": "OpenAI"
              },
              "metrics": {
                "likes": 10,
                "reposts": 2,
                "replies": 1
              }
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/social-media/x/tweet-search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "X Post Search",
      "description": "Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.",
      "longDescription": "Purpose: Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nBest use: Use this when an agent needs search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nPrice: $0.06 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, words, phrase, anyWords, noneWords, hashtags, from, to, mentioning, minReplies, minLikes, minReposts, since, until, maxResults.\n\nAccepted fields:\n- query (optional, string): Raw X/Twitter search query. If supplied, structured filter fields are ignored. Constraints: max length: 500.\n- words (optional, string): All words to include. Constraints: max length: 160.\n- phrase (optional, string): Exact phrase to include. Constraints: max length: 160.\n- anyWords (optional, array): Any of these words may match. Constraints: max items: 12.\n- noneWords (optional, array): Words to exclude. Constraints: max items: 12.\n- hashtags (optional, array): Hashtags to include, with or without #. Constraints: max items: 12.\n- from (optional, string): Only posts from this username. Constraints: max length: 80.\n- to (optional, string): Only replies to this username. Constraints: max length: 80.\n- mentioning (optional, string): Only posts mentioning this username. Constraints: max length: 80.\n- minReplies (optional, integer): Minimum reply count. Constraints: min: 0.\n- minLikes (optional, integer): Minimum like count. Constraints: min: 0.\n- minReposts (optional, integer): Minimum repost count. Constraints: min: 0.\n- since (optional, string): Start date in YYYY-MM-DD.\n- until (optional, string): End date in YYYY-MM-DD.\n- maxResults (optional, integer): Maximum posts to return. Search is capped at 20 per call. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"from\": \"OpenAI\",\n  \"words\": \"agent\",\n  \"minLikes\": 10,\n  \"maxResults\": 5\n}\n```",
      "category": "social-media",
      "kind": "social-data-tool",
      "departmentId": "social-media",
      "department": "Social Media",
      "aisleId": "x-twitter",
      "aisle": "X/Twitter",
      "shelfId": "search",
      "shelf": "Search",
      "offeringId": "x-tweet-search",
      "offering": "X Post Search",
      "pathIds": [
        "social-media",
        "x-twitter",
        "search",
        "x-tweet-search"
      ],
      "pathLabels": [
        "Social Media",
        "X/Twitter",
        "Search",
        "X Post Search"
      ],
      "taxonomyPath": "social-media.x-twitter.search.x-tweet-search",
      "layout": {
        "department": {
          "id": "social-media",
          "name": "Social Media"
        },
        "aisle": {
          "id": "x-twitter",
          "name": "X/Twitter"
        },
        "shelf": {
          "id": "search",
          "name": "Search"
        },
        "offering": {
          "id": "x-tweet-search",
          "name": "X Post Search"
        },
        "pathIds": [
          "social-media",
          "x-twitter",
          "search",
          "x-tweet-search"
        ],
        "pathLabels": [
          "Social Media",
          "X/Twitter",
          "Search",
          "X Post Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "social-media",
        "x",
        "twitter",
        "search",
        "social-listening",
        "creator-research",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "60000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "60000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "anyOf": [
          {
            "required": [
              "query"
            ]
          },
          {
            "required": [
              "words"
            ]
          },
          {
            "required": [
              "phrase"
            ]
          },
          {
            "required": [
              "hashtags"
            ]
          },
          {
            "required": [
              "from"
            ]
          }
        ],
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 500,
            "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored."
          },
          "words": {
            "type": "string",
            "maxLength": 160,
            "description": "All words to include."
          },
          "phrase": {
            "type": "string",
            "maxLength": 160,
            "description": "Exact phrase to include."
          },
          "anyWords": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 80,
              "description": "Any Words item value for X Post Search. Constraints: max length: 80."
            },
            "maxItems": 12,
            "description": "Any of these words may match."
          },
          "noneWords": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 80,
              "description": "None Words item value for X Post Search. Constraints: max length: 80."
            },
            "maxItems": 12,
            "description": "Words to exclude."
          },
          "hashtags": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 80,
              "description": "Hashtags item value for X Post Search. Constraints: max length: 80."
            },
            "maxItems": 12,
            "description": "Hashtags to include, with or without #."
          },
          "from": {
            "type": "string",
            "maxLength": 80,
            "description": "Only posts from this username."
          },
          "to": {
            "type": "string",
            "maxLength": 80,
            "description": "Only replies to this username."
          },
          "mentioning": {
            "type": "string",
            "maxLength": 80,
            "description": "Only posts mentioning this username."
          },
          "minReplies": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum reply count."
          },
          "minLikes": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum like count."
          },
          "minReposts": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum repost count."
          },
          "since": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Start date in YYYY-MM-DD."
          },
          "until": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "End date in YYYY-MM-DD."
          },
          "maxResults": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 10,
            "description": "Maximum posts to return. Search is capped at 20 per call."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "words",
          "phrase",
          "anyWords",
          "noneWords",
          "hashtags",
          "from",
          "to",
          "mentioning",
          "minReplies",
          "minLikes",
          "minReposts",
          "since",
          "until",
          "maxResults"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored.",
            "constraints": {
              "maxLength": 500
            }
          },
          {
            "name": "words",
            "type": "string",
            "required": false,
            "description": "All words to include.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "phrase",
            "type": "string",
            "required": false,
            "description": "Exact phrase to include.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "anyWords",
            "type": "array",
            "required": false,
            "description": "Any of these words may match.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "noneWords",
            "type": "array",
            "required": false,
            "description": "Words to exclude.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "hashtags",
            "type": "array",
            "required": false,
            "description": "Hashtags to include, with or without #.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "type": "string",
            "required": false,
            "description": "Only posts from this username.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "to",
            "type": "string",
            "required": false,
            "description": "Only replies to this username.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "mentioning",
            "type": "string",
            "required": false,
            "description": "Only posts mentioning this username.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "minReplies",
            "type": "integer",
            "required": false,
            "description": "Minimum reply count.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "minLikes",
            "type": "integer",
            "required": false,
            "description": "Minimum like count.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "minReposts",
            "type": "integer",
            "required": false,
            "description": "Minimum repost count.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "since",
            "type": "string",
            "required": false,
            "description": "Start date in YYYY-MM-DD."
          },
          {
            "name": "until",
            "type": "string",
            "required": false,
            "description": "End date in YYYY-MM-DD."
          },
          {
            "name": "maxResults",
            "type": "integer",
            "required": false,
            "description": "Maximum posts to return. Search is capped at 20 per call.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 20
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "from": "OpenAI",
          "words": "agent",
          "minLikes": 10,
          "maxResults": 5
        }
      },
      "exampleRequest": {
        "from": "OpenAI",
        "words": "agent",
        "minLikes": 10,
        "maxResults": 5
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "profile": {
            "type": "object",
            "additionalProperties": true
          },
          "tweet": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result_count": {
            "type": "integer"
          },
          "meta": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "x-tweet-search",
          "name": "X Post Search",
          "department": "Social Media"
        },
        "requested": {
          "query": "agent from:OpenAI min_faves:10",
          "maxResults": 5
        },
        "result_count": 5,
        "results": [
          {
            "id": "1110302988",
            "text": "Normalized public post text",
            "author": {
              "username": "OpenAI"
            },
            "metrics": {
              "likes": 10,
              "reposts": 2,
              "replies": 1
            }
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "from": "OpenAI",
                "words": "agent",
                "minLikes": 10,
                "maxResults": 5
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "x-tweet-search",
                  "name": "X Post Search",
                  "department": "Social Media"
                },
                "requested": {
                  "query": "agent from:OpenAI min_faves:10",
                  "maxResults": 5
                },
                "result_count": 5,
                "results": [
                  {
                    "id": "1110302988",
                    "text": "Normalized public post text",
                    "author": {
                      "username": "OpenAI"
                    },
                    "metrics": {
                      "likes": 10,
                      "reposts": 2,
                      "replies": 1
                    }
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/social-media/x/tweet-search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "anyOf": [
                      {
                        "required": [
                          "query"
                        ]
                      },
                      {
                        "required": [
                          "words"
                        ]
                      },
                      {
                        "required": [
                          "phrase"
                        ]
                      },
                      {
                        "required": [
                          "hashtags"
                        ]
                      },
                      {
                        "required": [
                          "from"
                        ]
                      }
                    ],
                    "properties": {
                      "query": {
                        "type": "string",
                        "maxLength": 500,
                        "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored."
                      },
                      "words": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "All words to include."
                      },
                      "phrase": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Exact phrase to include."
                      },
                      "anyWords": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "maxLength": 80,
                          "description": "Any Words item value for X Post Search. Constraints: max length: 80."
                        },
                        "maxItems": 12,
                        "description": "Any of these words may match."
                      },
                      "noneWords": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "maxLength": 80,
                          "description": "None Words item value for X Post Search. Constraints: max length: 80."
                        },
                        "maxItems": 12,
                        "description": "Words to exclude."
                      },
                      "hashtags": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "maxLength": 80,
                          "description": "Hashtags item value for X Post Search. Constraints: max length: 80."
                        },
                        "maxItems": 12,
                        "description": "Hashtags to include, with or without #."
                      },
                      "from": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Only posts from this username."
                      },
                      "to": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Only replies to this username."
                      },
                      "mentioning": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Only posts mentioning this username."
                      },
                      "minReplies": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum reply count."
                      },
                      "minLikes": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum like count."
                      },
                      "minReposts": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum repost count."
                      },
                      "since": {
                        "type": "string",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "description": "Start date in YYYY-MM-DD."
                      },
                      "until": {
                        "type": "string",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "description": "End date in YYYY-MM-DD."
                      },
                      "maxResults": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 10,
                        "description": "Maximum posts to return. Search is capped at 20 per call."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "profile": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "tweet": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result_count": {
                        "type": "integer"
                      },
                      "meta": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x-tweet-search",
            "url": "https://agentbodega.store/api/social-media/x/tweet-search",
            "method": "POST",
            "description": "Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.",
            "longDescription": "Purpose: Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nBest use: Use this when an agent needs search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nPrice: $0.06 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, words, phrase, anyWords, noneWords, hashtags, from, to, mentioning, minReplies, minLikes, minReposts, since, until, maxResults.\n\nAccepted fields:\n- query (optional, string): Raw X/Twitter search query. If supplied, structured filter fields are ignored. Constraints: max length: 500.\n- words (optional, string): All words to include. Constraints: max length: 160.\n- phrase (optional, string): Exact phrase to include. Constraints: max length: 160.\n- anyWords (optional, array): Any of these words may match. Constraints: max items: 12.\n- noneWords (optional, array): Words to exclude. Constraints: max items: 12.\n- hashtags (optional, array): Hashtags to include, with or without #. Constraints: max items: 12.\n- from (optional, string): Only posts from this username. Constraints: max length: 80.\n- to (optional, string): Only replies to this username. Constraints: max length: 80.\n- mentioning (optional, string): Only posts mentioning this username. Constraints: max length: 80.\n- minReplies (optional, integer): Minimum reply count. Constraints: min: 0.\n- minLikes (optional, integer): Minimum like count. Constraints: min: 0.\n- minReposts (optional, integer): Minimum repost count. Constraints: min: 0.\n- since (optional, string): Start date in YYYY-MM-DD.\n- until (optional, string): End date in YYYY-MM-DD.\n- maxResults (optional, integer): Maximum posts to return. Search is capped at 20 per call. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"from\": \"OpenAI\",\n  \"words\": \"agent\",\n  \"minLikes\": 10,\n  \"maxResults\": 5\n}\n```",
            "mimeType": "application/json",
            "serviceName": "X Post Search",
            "category": "social-media",
            "kind": "social-data-tool",
            "tags": [
              "social-media",
              "x",
              "twitter",
              "search",
              "social-listening",
              "creator-research",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "words",
                "phrase",
                "anyWords",
                "noneWords",
                "hashtags",
                "from",
                "to",
                "mentioning",
                "minReplies",
                "minLikes",
                "minReposts",
                "since",
                "until",
                "maxResults"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored.",
                  "constraints": {
                    "maxLength": 500
                  }
                },
                {
                  "name": "words",
                  "type": "string",
                  "required": false,
                  "description": "All words to include.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "phrase",
                  "type": "string",
                  "required": false,
                  "description": "Exact phrase to include.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "anyWords",
                  "type": "array",
                  "required": false,
                  "description": "Any of these words may match.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "noneWords",
                  "type": "array",
                  "required": false,
                  "description": "Words to exclude.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "hashtags",
                  "type": "array",
                  "required": false,
                  "description": "Hashtags to include, with or without #.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "from",
                  "type": "string",
                  "required": false,
                  "description": "Only posts from this username.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "to",
                  "type": "string",
                  "required": false,
                  "description": "Only replies to this username.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "mentioning",
                  "type": "string",
                  "required": false,
                  "description": "Only posts mentioning this username.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "minReplies",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum reply count.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "minLikes",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum like count.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "minReposts",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum repost count.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "since",
                  "type": "string",
                  "required": false,
                  "description": "Start date in YYYY-MM-DD."
                },
                {
                  "name": "until",
                  "type": "string",
                  "required": false,
                  "description": "End date in YYYY-MM-DD."
                },
                {
                  "name": "maxResults",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum posts to return. Search is capped at 20 per call.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 20
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "from": "OpenAI",
                "words": "agent",
                "minLikes": 10,
                "maxResults": 5
              }
            },
            "inputSchema": {
              "type": "object",
              "anyOf": [
                {
                  "required": [
                    "query"
                  ]
                },
                {
                  "required": [
                    "words"
                  ]
                },
                {
                  "required": [
                    "phrase"
                  ]
                },
                {
                  "required": [
                    "hashtags"
                  ]
                },
                {
                  "required": [
                    "from"
                  ]
                }
              ],
              "properties": {
                "query": {
                  "type": "string",
                  "maxLength": 500,
                  "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored."
                },
                "words": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "All words to include."
                },
                "phrase": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Exact phrase to include."
                },
                "anyWords": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 80,
                    "description": "Any Words item value for X Post Search. Constraints: max length: 80."
                  },
                  "maxItems": 12,
                  "description": "Any of these words may match."
                },
                "noneWords": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 80,
                    "description": "None Words item value for X Post Search. Constraints: max length: 80."
                  },
                  "maxItems": 12,
                  "description": "Words to exclude."
                },
                "hashtags": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 80,
                    "description": "Hashtags item value for X Post Search. Constraints: max length: 80."
                  },
                  "maxItems": 12,
                  "description": "Hashtags to include, with or without #."
                },
                "from": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Only posts from this username."
                },
                "to": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Only replies to this username."
                },
                "mentioning": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Only posts mentioning this username."
                },
                "minReplies": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum reply count."
                },
                "minLikes": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum like count."
                },
                "minReposts": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum repost count."
                },
                "since": {
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                  "description": "Start date in YYYY-MM-DD."
                },
                "until": {
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                  "description": "End date in YYYY-MM-DD."
                },
                "maxResults": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 10,
                  "description": "Maximum posts to return. Search is capped at 20 per call."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "profile": {
                  "type": "object",
                  "additionalProperties": true
                },
                "tweet": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result_count": {
                  "type": "integer"
                },
                "meta": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.06"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.06",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/social-media/x/tweet-search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.06"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/social-media/x/tweet-search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "social-media",
        "kind": "social-data-tool",
        "taxonomy": {
          "departmentId": "social-media",
          "department": "Social Media",
          "aisleId": "x-twitter",
          "aisle": "X/Twitter",
          "shelfId": "search",
          "shelf": "Search",
          "offeringId": "x-tweet-search",
          "offering": "X Post Search",
          "pathIds": [
            "social-media",
            "x-twitter",
            "search",
            "x-tweet-search"
          ],
          "pathLabels": [
            "Social Media",
            "X/Twitter",
            "Search",
            "X Post Search"
          ],
          "taxonomyPath": "social-media.x-twitter.search.x-tweet-search",
          "layout": {
            "department": {
              "id": "social-media",
              "name": "Social Media"
            },
            "aisle": {
              "id": "x-twitter",
              "name": "X/Twitter"
            },
            "shelf": {
              "id": "search",
              "name": "Search"
            },
            "offering": {
              "id": "x-tweet-search",
              "name": "X Post Search"
            },
            "pathIds": [
              "social-media",
              "x-twitter",
              "search",
              "x-tweet-search"
            ],
            "pathLabels": [
              "Social Media",
              "X/Twitter",
              "Search",
              "X Post Search"
            ]
          }
        },
        "description": {
          "short": "Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.",
          "full": "Purpose: Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nBest use: Use this when an agent needs search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nPrice: $0.06 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, words, phrase, anyWords, noneWords, hashtags, from, to, mentioning, minReplies, minLikes, minReposts, since, until, maxResults.\n\nAccepted fields:\n- query (optional, string): Raw X/Twitter search query. If supplied, structured filter fields are ignored. Constraints: max length: 500.\n- words (optional, string): All words to include. Constraints: max length: 160.\n- phrase (optional, string): Exact phrase to include. Constraints: max length: 160.\n- anyWords (optional, array): Any of these words may match. Constraints: max items: 12.\n- noneWords (optional, array): Words to exclude. Constraints: max items: 12.\n- hashtags (optional, array): Hashtags to include, with or without #. Constraints: max items: 12.\n- from (optional, string): Only posts from this username. Constraints: max length: 80.\n- to (optional, string): Only replies to this username. Constraints: max length: 80.\n- mentioning (optional, string): Only posts mentioning this username. Constraints: max length: 80.\n- minReplies (optional, integer): Minimum reply count. Constraints: min: 0.\n- minLikes (optional, integer): Minimum like count. Constraints: min: 0.\n- minReposts (optional, integer): Minimum repost count. Constraints: min: 0.\n- since (optional, string): Start date in YYYY-MM-DD.\n- until (optional, string): End date in YYYY-MM-DD.\n- maxResults (optional, integer): Maximum posts to return. Search is capped at 20 per call. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"from\": \"OpenAI\",\n  \"words\": \"agent\",\n  \"minLikes\": 10,\n  \"maxResults\": 5\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "query"
              ]
            },
            {
              "required": [
                "words"
              ]
            },
            {
              "required": [
                "phrase"
              ]
            },
            {
              "required": [
                "hashtags"
              ]
            },
            {
              "required": [
                "from"
              ]
            }
          ],
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 500,
              "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored."
            },
            "words": {
              "type": "string",
              "maxLength": 160,
              "description": "All words to include."
            },
            "phrase": {
              "type": "string",
              "maxLength": 160,
              "description": "Exact phrase to include."
            },
            "anyWords": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Any Words item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Any of these words may match."
            },
            "noneWords": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "None Words item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Words to exclude."
            },
            "hashtags": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Hashtags item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Hashtags to include, with or without #."
            },
            "from": {
              "type": "string",
              "maxLength": 80,
              "description": "Only posts from this username."
            },
            "to": {
              "type": "string",
              "maxLength": 80,
              "description": "Only replies to this username."
            },
            "mentioning": {
              "type": "string",
              "maxLength": 80,
              "description": "Only posts mentioning this username."
            },
            "minReplies": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum reply count."
            },
            "minLikes": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum like count."
            },
            "minReposts": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum repost count."
            },
            "since": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "description": "Start date in YYYY-MM-DD."
            },
            "until": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "description": "End date in YYYY-MM-DD."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum posts to return. Search is capped at 20 per call."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "query"
              ]
            },
            {
              "required": [
                "words"
              ]
            },
            {
              "required": [
                "phrase"
              ]
            },
            {
              "required": [
                "hashtags"
              ]
            },
            {
              "required": [
                "from"
              ]
            }
          ],
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 500,
              "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored."
            },
            "words": {
              "type": "string",
              "maxLength": 160,
              "description": "All words to include."
            },
            "phrase": {
              "type": "string",
              "maxLength": 160,
              "description": "Exact phrase to include."
            },
            "anyWords": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Any Words item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Any of these words may match."
            },
            "noneWords": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "None Words item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Words to exclude."
            },
            "hashtags": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Hashtags item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Hashtags to include, with or without #."
            },
            "from": {
              "type": "string",
              "maxLength": 80,
              "description": "Only posts from this username."
            },
            "to": {
              "type": "string",
              "maxLength": 80,
              "description": "Only replies to this username."
            },
            "mentioning": {
              "type": "string",
              "maxLength": 80,
              "description": "Only posts mentioning this username."
            },
            "minReplies": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum reply count."
            },
            "minLikes": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum like count."
            },
            "minReposts": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum repost count."
            },
            "since": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "description": "Start date in YYYY-MM-DD."
            },
            "until": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "description": "End date in YYYY-MM-DD."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum posts to return. Search is capped at 20 per call."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "words",
            "phrase",
            "anyWords",
            "noneWords",
            "hashtags",
            "from",
            "to",
            "mentioning",
            "minReplies",
            "minLikes",
            "minReposts",
            "since",
            "until",
            "maxResults"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored.",
              "constraints": {
                "maxLength": 500
              }
            },
            {
              "name": "words",
              "type": "string",
              "required": false,
              "description": "All words to include.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "phrase",
              "type": "string",
              "required": false,
              "description": "Exact phrase to include.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "anyWords",
              "type": "array",
              "required": false,
              "description": "Any of these words may match.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "noneWords",
              "type": "array",
              "required": false,
              "description": "Words to exclude.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "hashtags",
              "type": "array",
              "required": false,
              "description": "Hashtags to include, with or without #.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "from",
              "type": "string",
              "required": false,
              "description": "Only posts from this username.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "to",
              "type": "string",
              "required": false,
              "description": "Only replies to this username.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "mentioning",
              "type": "string",
              "required": false,
              "description": "Only posts mentioning this username.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "minReplies",
              "type": "integer",
              "required": false,
              "description": "Minimum reply count.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "minLikes",
              "type": "integer",
              "required": false,
              "description": "Minimum like count.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "minReposts",
              "type": "integer",
              "required": false,
              "description": "Minimum repost count.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "since",
              "type": "string",
              "required": false,
              "description": "Start date in YYYY-MM-DD."
            },
            {
              "name": "until",
              "type": "string",
              "required": false,
              "description": "End date in YYYY-MM-DD."
            },
            {
              "name": "maxResults",
              "type": "integer",
              "required": false,
              "description": "Maximum posts to return. Search is capped at 20 per call.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 20
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "from": "OpenAI",
            "words": "agent",
            "minLikes": 10,
            "maxResults": 5
          }
        },
        "exampleRequest": {
          "from": "OpenAI",
          "words": "agent",
          "minLikes": 10,
          "maxResults": 5
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "x-tweet-search",
            "name": "X Post Search",
            "department": "Social Media"
          },
          "requested": {
            "query": "agent from:OpenAI min_faves:10",
            "maxResults": 5
          },
          "result_count": 5,
          "results": [
            {
              "id": "1110302988",
              "text": "Normalized public post text",
              "author": {
                "username": "OpenAI"
              },
              "metrics": {
                "likes": 10,
                "reposts": 2,
                "replies": 1
              }
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/outdoor-recreation-availability",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Outdoor Recreation Availability Check",
      "description": "Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.",
      "longDescription": "Purpose: Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nBest use: Use this when an agent needs check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resource, startDate, endDate.\nOptional fields: entityId, entityType, state, isLottery, filters, limit, includeMetadata, proxiesSx.\n\nAccepted fields:\n- resource (required, string): Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources.\n- entityId (optional, string): Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied.\n- entityType (optional, string): Optional known resource type. URLs usually imply this automatically. Constraints: accepted values: \"campground\", \"campsite\", \"permit\", \"timedentry\", \"timedentry_tour\".\n- state (optional, string): Optional state filter for name resolution, such as CA or California.\n- startDate (required, string): Start date in YYYY-MM-DD. For campgrounds this is the check-in date. Constraints: format: date.\n- endDate (required, string): End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout. Constraints: format: date.\n- isLottery (optional, boolean): For permits, request lottery quota/application state instead of post-draw/walk-up availability. Constraints: default: false.\n- filters (optional, object): Filters object for configuring Outdoor Recreation Availability Check. Object accepts: groupSize, siteType, equipment, rvLengthFt, electric, accessibility, petsAllowed, loop, availableOnly.\n- limit (optional, integer): Maximum matching sites, divisions, or slots to return. Constraints: default: 20; min: 1; max: 50.\n- includeMetadata (optional, boolean): For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available. Constraints: default: true.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resource\": \"Upper Pines Campground\",\n  \"state\": \"CA\",\n  \"startDate\": \"2026-06-15\",\n  \"endDate\": \"2026-06-19\",\n  \"filters\": {\n    \"siteType\": \"TENT ONLY\",\n    \"groupSize\": 4,\n    \"availableOnly\": true\n  },\n  \"limit\": 5\n}\n```",
      "category": "public-data",
      "kind": "data-job",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "outdoor-recreation",
      "aisle": "Outdoor Recreation",
      "shelfId": "outdoor-recreation",
      "shelf": "Outdoor Recreation",
      "offeringId": "outdoor-recreation-availability",
      "offering": "Outdoor Recreation Availability Check",
      "pathIds": [
        "public-data",
        "outdoor-recreation",
        "outdoor-recreation",
        "outdoor-recreation-availability"
      ],
      "pathLabels": [
        "Public Data",
        "Outdoor Recreation",
        "Outdoor Recreation",
        "Outdoor Recreation Availability Check"
      ],
      "taxonomyPath": "public-data.outdoor-recreation.outdoor-recreation.outdoor-recreation-availability",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "outdoor-recreation",
          "name": "Outdoor Recreation"
        },
        "shelf": {
          "id": "outdoor-recreation",
          "name": "Outdoor Recreation"
        },
        "offering": {
          "id": "outdoor-recreation-availability",
          "name": "Outdoor Recreation Availability Check"
        },
        "pathIds": [
          "public-data",
          "outdoor-recreation",
          "outdoor-recreation",
          "outdoor-recreation-availability"
        ],
        "pathLabels": [
          "Public Data",
          "Outdoor Recreation",
          "Outdoor Recreation",
          "Outdoor Recreation Availability Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "camping",
        "permits",
        "public-data",
        "travel",
        "availability",
        "parks"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "resource",
          "startDate",
          "endDate"
        ],
        "properties": {
          "resource": {
            "type": "string",
            "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
          },
          "entityId": {
            "type": "string",
            "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
          },
          "entityType": {
            "type": "string",
            "enum": [
              "campground",
              "campsite",
              "permit",
              "timedentry",
              "timedentry_tour"
            ],
            "description": "Optional known resource type. URLs usually imply this automatically."
          },
          "state": {
            "type": "string",
            "description": "Optional state filter for name resolution, such as CA or California."
          },
          "startDate": {
            "type": "string",
            "format": "date",
            "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date."
          },
          "endDate": {
            "type": "string",
            "format": "date",
            "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout."
          },
          "isLottery": {
            "type": "boolean",
            "default": false,
            "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability."
          },
          "filters": {
            "type": "object",
            "properties": {
              "groupSize": {
                "type": "integer",
                "minimum": 1,
                "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
              },
              "siteType": {
                "type": "string",
                "description": "Campground site type filter, such as tent only, RV, group, or standard."
              },
              "equipment": {
                "type": "string",
                "description": "Equipment name to match in permitted equipment, such as RV or tent."
              },
              "rvLengthFt": {
                "type": "integer",
                "minimum": 1,
                "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
              },
              "electric": {
                "type": "boolean",
                "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
              },
              "accessibility": {
                "type": "boolean",
                "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
              },
              "petsAllowed": {
                "type": "boolean",
                "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
              },
              "loop": {
                "type": "string",
                "description": "Loop value for Outdoor Recreation Availability Check."
              },
              "availableOnly": {
                "type": "boolean",
                "default": true,
                "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true."
              }
            },
            "additionalProperties": false,
            "description": "Filters object for configuring Outdoor Recreation Availability Check."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Maximum matching sites, divisions, or slots to return."
          },
          "includeMetadata": {
            "type": "boolean",
            "default": true,
            "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "resource",
          "startDate",
          "endDate"
        ],
        "optional": [
          "entityId",
          "entityType",
          "state",
          "isLottery",
          "filters",
          "limit",
          "includeMetadata",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "resource",
            "type": "string",
            "required": true,
            "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
          },
          {
            "name": "entityId",
            "type": "string",
            "required": false,
            "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
          },
          {
            "name": "entityType",
            "type": "string",
            "required": false,
            "description": "Optional known resource type. URLs usually imply this automatically.",
            "constraints": {
              "enum": [
                "campground",
                "campsite",
                "permit",
                "timedentry",
                "timedentry_tour"
              ]
            }
          },
          {
            "name": "state",
            "type": "string",
            "required": false,
            "description": "Optional state filter for name resolution, such as CA or California."
          },
          {
            "name": "startDate",
            "type": "string",
            "required": true,
            "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date.",
            "constraints": {
              "format": "date"
            }
          },
          {
            "name": "endDate",
            "type": "string",
            "required": true,
            "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout.",
            "constraints": {
              "format": "date"
            }
          },
          {
            "name": "isLottery",
            "type": "boolean",
            "required": false,
            "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "filters",
            "type": "object",
            "required": false,
            "description": "Filters object for configuring Outdoor Recreation Availability Check.",
            "fields": [
              {
                "name": "groupSize",
                "type": "integer",
                "required": false,
                "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                "constraints": {
                  "minimum": 1
                }
              },
              {
                "name": "siteType",
                "type": "string",
                "required": false,
                "description": "Campground site type filter, such as tent only, RV, group, or standard."
              },
              {
                "name": "equipment",
                "type": "string",
                "required": false,
                "description": "Equipment name to match in permitted equipment, such as RV or tent."
              },
              {
                "name": "rvLengthFt",
                "type": "integer",
                "required": false,
                "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                "constraints": {
                  "minimum": 1
                }
              },
              {
                "name": "electric",
                "type": "boolean",
                "required": false,
                "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
              },
              {
                "name": "accessibility",
                "type": "boolean",
                "required": false,
                "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
              },
              {
                "name": "petsAllowed",
                "type": "boolean",
                "required": false,
                "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
              },
              {
                "name": "loop",
                "type": "string",
                "required": false,
                "description": "Loop value for Outdoor Recreation Availability Check."
              },
              {
                "name": "availableOnly",
                "type": "boolean",
                "required": false,
                "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true.",
                "constraints": {
                  "default": true
                }
              }
            ]
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum matching sites, divisions, or slots to return.",
            "constraints": {
              "default": 20,
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "includeMetadata",
            "type": "boolean",
            "required": false,
            "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "resource": "Upper Pines Campground",
          "state": "CA",
          "startDate": "2026-06-15",
          "endDate": "2026-06-19",
          "filters": {
            "siteType": "TENT ONLY",
            "groupSize": 4,
            "availableOnly": true
          },
          "limit": 5
        }
      },
      "exampleRequest": {
        "resource": "Upper Pines Campground",
        "state": "CA",
        "startDate": "2026-06-15",
        "endDate": "2026-06-19",
        "filters": {
          "siteType": "TENT ONLY",
          "groupSize": 4,
          "availableOnly": true
        },
        "limit": 5
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "kind",
          "requested",
          "resolved",
          "checkedAt"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "campground",
              "campsite",
              "permit",
              "timedentry",
              "timedentry_tour"
            ]
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "resolved": {
            "type": "object",
            "additionalProperties": true
          },
          "sites": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "divisions": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "slots": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "kind": "campground",
        "resolved": {
          "entityId": "232447",
          "entityType": "campground",
          "name": "Upper Pines Campground",
          "state": "CA"
        },
        "dateRange": {
          "checkin": "2026-06-15",
          "checkout": "2026-06-19",
          "nights": 4
        },
        "sites": [
          {
            "campsite_id": "98",
            "site_number": "040",
            "loop": "Upper Pines",
            "campsite_type": "TENT ONLY NONELECTRIC",
            "max_num_people": 6,
            "pets_allowed": "Domestic",
            "availability": {
              "2026-06-15": "Available",
              "2026-06-16": "Available",
              "2026-06-17": "Reserved",
              "2026-06-18": "Available"
            }
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "resource": "Upper Pines Campground",
                "state": "CA",
                "startDate": "2026-06-15",
                "endDate": "2026-06-19",
                "filters": {
                  "siteType": "TENT ONLY",
                  "groupSize": 4,
                  "availableOnly": true
                },
                "limit": 5
              }
            },
            "output": {
              "type": "json",
              "example": {
                "kind": "campground",
                "resolved": {
                  "entityId": "232447",
                  "entityType": "campground",
                  "name": "Upper Pines Campground",
                  "state": "CA"
                },
                "dateRange": {
                  "checkin": "2026-06-15",
                  "checkout": "2026-06-19",
                  "nights": 4
                },
                "sites": [
                  {
                    "campsite_id": "98",
                    "site_number": "040",
                    "loop": "Upper Pines",
                    "campsite_type": "TENT ONLY NONELECTRIC",
                    "max_num_people": 6,
                    "pets_allowed": "Domestic",
                    "availability": {
                      "2026-06-15": "Available",
                      "2026-06-16": "Available",
                      "2026-06-17": "Reserved",
                      "2026-06-18": "Available"
                    }
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/outdoor-recreation-availability",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "resource",
                      "startDate",
                      "endDate"
                    ],
                    "properties": {
                      "resource": {
                        "type": "string",
                        "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
                      },
                      "entityId": {
                        "type": "string",
                        "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
                      },
                      "entityType": {
                        "type": "string",
                        "enum": [
                          "campground",
                          "campsite",
                          "permit",
                          "timedentry",
                          "timedentry_tour"
                        ],
                        "description": "Optional known resource type. URLs usually imply this automatically."
                      },
                      "state": {
                        "type": "string",
                        "description": "Optional state filter for name resolution, such as CA or California."
                      },
                      "startDate": {
                        "type": "string",
                        "format": "date",
                        "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date."
                      },
                      "endDate": {
                        "type": "string",
                        "format": "date",
                        "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout."
                      },
                      "isLottery": {
                        "type": "boolean",
                        "default": false,
                        "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability."
                      },
                      "filters": {
                        "type": "object",
                        "properties": {
                          "groupSize": {
                            "type": "integer",
                            "minimum": 1,
                            "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                          },
                          "siteType": {
                            "type": "string",
                            "description": "Campground site type filter, such as tent only, RV, group, or standard."
                          },
                          "equipment": {
                            "type": "string",
                            "description": "Equipment name to match in permitted equipment, such as RV or tent."
                          },
                          "rvLengthFt": {
                            "type": "integer",
                            "minimum": 1,
                            "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                          },
                          "electric": {
                            "type": "boolean",
                            "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                          },
                          "accessibility": {
                            "type": "boolean",
                            "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                          },
                          "petsAllowed": {
                            "type": "boolean",
                            "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                          },
                          "loop": {
                            "type": "string",
                            "description": "Loop value for Outdoor Recreation Availability Check."
                          },
                          "availableOnly": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true."
                          }
                        },
                        "additionalProperties": false,
                        "description": "Filters object for configuring Outdoor Recreation Availability Check."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 50,
                        "default": 20,
                        "description": "Maximum matching sites, divisions, or slots to return."
                      },
                      "includeMetadata": {
                        "type": "boolean",
                        "default": true,
                        "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "kind",
                      "requested",
                      "resolved",
                      "checkedAt"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "enum": [
                          "campground",
                          "campsite",
                          "permit",
                          "timedentry",
                          "timedentry_tour"
                        ]
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "resolved": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "sites": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "divisions": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "slots": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "outdoor-recreation-availability",
            "url": "https://agentbodega.store/api/public-data/outdoor-recreation-availability",
            "method": "POST",
            "description": "Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.",
            "longDescription": "Purpose: Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nBest use: Use this when an agent needs check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resource, startDate, endDate.\nOptional fields: entityId, entityType, state, isLottery, filters, limit, includeMetadata, proxiesSx.\n\nAccepted fields:\n- resource (required, string): Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources.\n- entityId (optional, string): Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied.\n- entityType (optional, string): Optional known resource type. URLs usually imply this automatically. Constraints: accepted values: \"campground\", \"campsite\", \"permit\", \"timedentry\", \"timedentry_tour\".\n- state (optional, string): Optional state filter for name resolution, such as CA or California.\n- startDate (required, string): Start date in YYYY-MM-DD. For campgrounds this is the check-in date. Constraints: format: date.\n- endDate (required, string): End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout. Constraints: format: date.\n- isLottery (optional, boolean): For permits, request lottery quota/application state instead of post-draw/walk-up availability. Constraints: default: false.\n- filters (optional, object): Filters object for configuring Outdoor Recreation Availability Check. Object accepts: groupSize, siteType, equipment, rvLengthFt, electric, accessibility, petsAllowed, loop, availableOnly.\n- limit (optional, integer): Maximum matching sites, divisions, or slots to return. Constraints: default: 20; min: 1; max: 50.\n- includeMetadata (optional, boolean): For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available. Constraints: default: true.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resource\": \"Upper Pines Campground\",\n  \"state\": \"CA\",\n  \"startDate\": \"2026-06-15\",\n  \"endDate\": \"2026-06-19\",\n  \"filters\": {\n    \"siteType\": \"TENT ONLY\",\n    \"groupSize\": 4,\n    \"availableOnly\": true\n  },\n  \"limit\": 5\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Outdoor Recreation Availability Check",
            "category": "public-data",
            "kind": "data-job",
            "tags": [
              "camping",
              "permits",
              "public-data",
              "travel",
              "availability",
              "parks"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "resource",
                "startDate",
                "endDate"
              ],
              "optional": [
                "entityId",
                "entityType",
                "state",
                "isLottery",
                "filters",
                "limit",
                "includeMetadata",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "resource",
                  "type": "string",
                  "required": true,
                  "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
                },
                {
                  "name": "entityId",
                  "type": "string",
                  "required": false,
                  "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
                },
                {
                  "name": "entityType",
                  "type": "string",
                  "required": false,
                  "description": "Optional known resource type. URLs usually imply this automatically.",
                  "constraints": {
                    "enum": [
                      "campground",
                      "campsite",
                      "permit",
                      "timedentry",
                      "timedentry_tour"
                    ]
                  }
                },
                {
                  "name": "state",
                  "type": "string",
                  "required": false,
                  "description": "Optional state filter for name resolution, such as CA or California."
                },
                {
                  "name": "startDate",
                  "type": "string",
                  "required": true,
                  "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date.",
                  "constraints": {
                    "format": "date"
                  }
                },
                {
                  "name": "endDate",
                  "type": "string",
                  "required": true,
                  "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout.",
                  "constraints": {
                    "format": "date"
                  }
                },
                {
                  "name": "isLottery",
                  "type": "boolean",
                  "required": false,
                  "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "filters",
                  "type": "object",
                  "required": false,
                  "description": "Filters object for configuring Outdoor Recreation Availability Check.",
                  "fields": [
                    {
                      "name": "groupSize",
                      "type": "integer",
                      "required": false,
                      "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                      "constraints": {
                        "minimum": 1
                      }
                    },
                    {
                      "name": "siteType",
                      "type": "string",
                      "required": false,
                      "description": "Campground site type filter, such as tent only, RV, group, or standard."
                    },
                    {
                      "name": "equipment",
                      "type": "string",
                      "required": false,
                      "description": "Equipment name to match in permitted equipment, such as RV or tent."
                    },
                    {
                      "name": "rvLengthFt",
                      "type": "integer",
                      "required": false,
                      "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                      "constraints": {
                        "minimum": 1
                      }
                    },
                    {
                      "name": "electric",
                      "type": "boolean",
                      "required": false,
                      "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                    },
                    {
                      "name": "accessibility",
                      "type": "boolean",
                      "required": false,
                      "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                    },
                    {
                      "name": "petsAllowed",
                      "type": "boolean",
                      "required": false,
                      "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                    },
                    {
                      "name": "loop",
                      "type": "string",
                      "required": false,
                      "description": "Loop value for Outdoor Recreation Availability Check."
                    },
                    {
                      "name": "availableOnly",
                      "type": "boolean",
                      "required": false,
                      "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true.",
                      "constraints": {
                        "default": true
                      }
                    }
                  ]
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum matching sites, divisions, or slots to return.",
                  "constraints": {
                    "default": 20,
                    "minimum": 1,
                    "maximum": 50
                  }
                },
                {
                  "name": "includeMetadata",
                  "type": "boolean",
                  "required": false,
                  "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "resource": "Upper Pines Campground",
                "state": "CA",
                "startDate": "2026-06-15",
                "endDate": "2026-06-19",
                "filters": {
                  "siteType": "TENT ONLY",
                  "groupSize": 4,
                  "availableOnly": true
                },
                "limit": 5
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "resource",
                "startDate",
                "endDate"
              ],
              "properties": {
                "resource": {
                  "type": "string",
                  "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
                },
                "entityId": {
                  "type": "string",
                  "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
                },
                "entityType": {
                  "type": "string",
                  "enum": [
                    "campground",
                    "campsite",
                    "permit",
                    "timedentry",
                    "timedentry_tour"
                  ],
                  "description": "Optional known resource type. URLs usually imply this automatically."
                },
                "state": {
                  "type": "string",
                  "description": "Optional state filter for name resolution, such as CA or California."
                },
                "startDate": {
                  "type": "string",
                  "format": "date",
                  "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date."
                },
                "endDate": {
                  "type": "string",
                  "format": "date",
                  "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout."
                },
                "isLottery": {
                  "type": "boolean",
                  "default": false,
                  "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability."
                },
                "filters": {
                  "type": "object",
                  "properties": {
                    "groupSize": {
                      "type": "integer",
                      "minimum": 1,
                      "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                    },
                    "siteType": {
                      "type": "string",
                      "description": "Campground site type filter, such as tent only, RV, group, or standard."
                    },
                    "equipment": {
                      "type": "string",
                      "description": "Equipment name to match in permitted equipment, such as RV or tent."
                    },
                    "rvLengthFt": {
                      "type": "integer",
                      "minimum": 1,
                      "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                    },
                    "electric": {
                      "type": "boolean",
                      "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                    },
                    "accessibility": {
                      "type": "boolean",
                      "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                    },
                    "petsAllowed": {
                      "type": "boolean",
                      "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                    },
                    "loop": {
                      "type": "string",
                      "description": "Loop value for Outdoor Recreation Availability Check."
                    },
                    "availableOnly": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true."
                    }
                  },
                  "additionalProperties": false,
                  "description": "Filters object for configuring Outdoor Recreation Availability Check."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 50,
                  "default": 20,
                  "description": "Maximum matching sites, divisions, or slots to return."
                },
                "includeMetadata": {
                  "type": "boolean",
                  "default": true,
                  "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "kind",
                "requested",
                "resolved",
                "checkedAt"
              ],
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "campground",
                    "campsite",
                    "permit",
                    "timedentry",
                    "timedentry_tour"
                  ]
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "resolved": {
                  "type": "object",
                  "additionalProperties": true
                },
                "sites": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "divisions": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "slots": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/outdoor-recreation-availability",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/outdoor-recreation-availability",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "data-job",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "outdoor-recreation",
          "aisle": "Outdoor Recreation",
          "shelfId": "outdoor-recreation",
          "shelf": "Outdoor Recreation",
          "offeringId": "outdoor-recreation-availability",
          "offering": "Outdoor Recreation Availability Check",
          "pathIds": [
            "public-data",
            "outdoor-recreation",
            "outdoor-recreation",
            "outdoor-recreation-availability"
          ],
          "pathLabels": [
            "Public Data",
            "Outdoor Recreation",
            "Outdoor Recreation",
            "Outdoor Recreation Availability Check"
          ],
          "taxonomyPath": "public-data.outdoor-recreation.outdoor-recreation.outdoor-recreation-availability",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "outdoor-recreation",
              "name": "Outdoor Recreation"
            },
            "shelf": {
              "id": "outdoor-recreation",
              "name": "Outdoor Recreation"
            },
            "offering": {
              "id": "outdoor-recreation-availability",
              "name": "Outdoor Recreation Availability Check"
            },
            "pathIds": [
              "public-data",
              "outdoor-recreation",
              "outdoor-recreation",
              "outdoor-recreation-availability"
            ],
            "pathLabels": [
              "Public Data",
              "Outdoor Recreation",
              "Outdoor Recreation",
              "Outdoor Recreation Availability Check"
            ]
          }
        },
        "description": {
          "short": "Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.",
          "full": "Purpose: Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nBest use: Use this when an agent needs check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resource, startDate, endDate.\nOptional fields: entityId, entityType, state, isLottery, filters, limit, includeMetadata, proxiesSx.\n\nAccepted fields:\n- resource (required, string): Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources.\n- entityId (optional, string): Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied.\n- entityType (optional, string): Optional known resource type. URLs usually imply this automatically. Constraints: accepted values: \"campground\", \"campsite\", \"permit\", \"timedentry\", \"timedentry_tour\".\n- state (optional, string): Optional state filter for name resolution, such as CA or California.\n- startDate (required, string): Start date in YYYY-MM-DD. For campgrounds this is the check-in date. Constraints: format: date.\n- endDate (required, string): End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout. Constraints: format: date.\n- isLottery (optional, boolean): For permits, request lottery quota/application state instead of post-draw/walk-up availability. Constraints: default: false.\n- filters (optional, object): Filters object for configuring Outdoor Recreation Availability Check. Object accepts: groupSize, siteType, equipment, rvLengthFt, electric, accessibility, petsAllowed, loop, availableOnly.\n- limit (optional, integer): Maximum matching sites, divisions, or slots to return. Constraints: default: 20; min: 1; max: 50.\n- includeMetadata (optional, boolean): For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available. Constraints: default: true.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resource\": \"Upper Pines Campground\",\n  \"state\": \"CA\",\n  \"startDate\": \"2026-06-15\",\n  \"endDate\": \"2026-06-19\",\n  \"filters\": {\n    \"siteType\": \"TENT ONLY\",\n    \"groupSize\": 4,\n    \"availableOnly\": true\n  },\n  \"limit\": 5\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "resource",
            "startDate",
            "endDate"
          ],
          "properties": {
            "resource": {
              "type": "string",
              "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
            },
            "entityId": {
              "type": "string",
              "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
            },
            "entityType": {
              "type": "string",
              "enum": [
                "campground",
                "campsite",
                "permit",
                "timedentry",
                "timedentry_tour"
              ],
              "description": "Optional known resource type. URLs usually imply this automatically."
            },
            "state": {
              "type": "string",
              "description": "Optional state filter for name resolution, such as CA or California."
            },
            "startDate": {
              "type": "string",
              "format": "date",
              "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date."
            },
            "endDate": {
              "type": "string",
              "format": "date",
              "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout."
            },
            "isLottery": {
              "type": "boolean",
              "default": false,
              "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability."
            },
            "filters": {
              "type": "object",
              "properties": {
                "groupSize": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                },
                "siteType": {
                  "type": "string",
                  "description": "Campground site type filter, such as tent only, RV, group, or standard."
                },
                "equipment": {
                  "type": "string",
                  "description": "Equipment name to match in permitted equipment, such as RV or tent."
                },
                "rvLengthFt": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                },
                "electric": {
                  "type": "boolean",
                  "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                },
                "accessibility": {
                  "type": "boolean",
                  "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                },
                "petsAllowed": {
                  "type": "boolean",
                  "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                },
                "loop": {
                  "type": "string",
                  "description": "Loop value for Outdoor Recreation Availability Check."
                },
                "availableOnly": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true."
                }
              },
              "additionalProperties": false,
              "description": "Filters object for configuring Outdoor Recreation Availability Check."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20,
              "description": "Maximum matching sites, divisions, or slots to return."
            },
            "includeMetadata": {
              "type": "boolean",
              "default": true,
              "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "resource",
            "startDate",
            "endDate"
          ],
          "properties": {
            "resource": {
              "type": "string",
              "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
            },
            "entityId": {
              "type": "string",
              "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
            },
            "entityType": {
              "type": "string",
              "enum": [
                "campground",
                "campsite",
                "permit",
                "timedentry",
                "timedentry_tour"
              ],
              "description": "Optional known resource type. URLs usually imply this automatically."
            },
            "state": {
              "type": "string",
              "description": "Optional state filter for name resolution, such as CA or California."
            },
            "startDate": {
              "type": "string",
              "format": "date",
              "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date."
            },
            "endDate": {
              "type": "string",
              "format": "date",
              "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout."
            },
            "isLottery": {
              "type": "boolean",
              "default": false,
              "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability."
            },
            "filters": {
              "type": "object",
              "properties": {
                "groupSize": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                },
                "siteType": {
                  "type": "string",
                  "description": "Campground site type filter, such as tent only, RV, group, or standard."
                },
                "equipment": {
                  "type": "string",
                  "description": "Equipment name to match in permitted equipment, such as RV or tent."
                },
                "rvLengthFt": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                },
                "electric": {
                  "type": "boolean",
                  "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                },
                "accessibility": {
                  "type": "boolean",
                  "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                },
                "petsAllowed": {
                  "type": "boolean",
                  "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                },
                "loop": {
                  "type": "string",
                  "description": "Loop value for Outdoor Recreation Availability Check."
                },
                "availableOnly": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true."
                }
              },
              "additionalProperties": false,
              "description": "Filters object for configuring Outdoor Recreation Availability Check."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20,
              "description": "Maximum matching sites, divisions, or slots to return."
            },
            "includeMetadata": {
              "type": "boolean",
              "default": true,
              "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "resource",
            "startDate",
            "endDate"
          ],
          "optional": [
            "entityId",
            "entityType",
            "state",
            "isLottery",
            "filters",
            "limit",
            "includeMetadata",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "resource",
              "type": "string",
              "required": true,
              "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
            },
            {
              "name": "entityId",
              "type": "string",
              "required": false,
              "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
            },
            {
              "name": "entityType",
              "type": "string",
              "required": false,
              "description": "Optional known resource type. URLs usually imply this automatically.",
              "constraints": {
                "enum": [
                  "campground",
                  "campsite",
                  "permit",
                  "timedentry",
                  "timedentry_tour"
                ]
              }
            },
            {
              "name": "state",
              "type": "string",
              "required": false,
              "description": "Optional state filter for name resolution, such as CA or California."
            },
            {
              "name": "startDate",
              "type": "string",
              "required": true,
              "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date.",
              "constraints": {
                "format": "date"
              }
            },
            {
              "name": "endDate",
              "type": "string",
              "required": true,
              "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout.",
              "constraints": {
                "format": "date"
              }
            },
            {
              "name": "isLottery",
              "type": "boolean",
              "required": false,
              "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "filters",
              "type": "object",
              "required": false,
              "description": "Filters object for configuring Outdoor Recreation Availability Check.",
              "fields": [
                {
                  "name": "groupSize",
                  "type": "integer",
                  "required": false,
                  "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                  "constraints": {
                    "minimum": 1
                  }
                },
                {
                  "name": "siteType",
                  "type": "string",
                  "required": false,
                  "description": "Campground site type filter, such as tent only, RV, group, or standard."
                },
                {
                  "name": "equipment",
                  "type": "string",
                  "required": false,
                  "description": "Equipment name to match in permitted equipment, such as RV or tent."
                },
                {
                  "name": "rvLengthFt",
                  "type": "integer",
                  "required": false,
                  "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                  "constraints": {
                    "minimum": 1
                  }
                },
                {
                  "name": "electric",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                },
                {
                  "name": "accessibility",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                },
                {
                  "name": "petsAllowed",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                },
                {
                  "name": "loop",
                  "type": "string",
                  "required": false,
                  "description": "Loop value for Outdoor Recreation Availability Check."
                },
                {
                  "name": "availableOnly",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                }
              ]
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum matching sites, divisions, or slots to return.",
              "constraints": {
                "default": 20,
                "minimum": 1,
                "maximum": 50
              }
            },
            {
              "name": "includeMetadata",
              "type": "boolean",
              "required": false,
              "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "resource": "Upper Pines Campground",
            "state": "CA",
            "startDate": "2026-06-15",
            "endDate": "2026-06-19",
            "filters": {
              "siteType": "TENT ONLY",
              "groupSize": 4,
              "availableOnly": true
            },
            "limit": 5
          }
        },
        "exampleRequest": {
          "resource": "Upper Pines Campground",
          "state": "CA",
          "startDate": "2026-06-15",
          "endDate": "2026-06-19",
          "filters": {
            "siteType": "TENT ONLY",
            "groupSize": 4,
            "availableOnly": true
          },
          "limit": 5
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "kind",
            "requested",
            "resolved",
            "checkedAt"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "campground",
                "campsite",
                "permit",
                "timedentry",
                "timedentry_tour"
              ]
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "resolved": {
              "type": "object",
              "additionalProperties": true
            },
            "sites": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "divisions": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "slots": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "kind",
            "requested",
            "resolved",
            "checkedAt"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "campground",
                "campsite",
                "permit",
                "timedentry",
                "timedentry_tour"
              ]
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "resolved": {
              "type": "object",
              "additionalProperties": true
            },
            "sites": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "divisions": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "slots": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "kind": "campground",
          "resolved": {
            "entityId": "232447",
            "entityType": "campground",
            "name": "Upper Pines Campground",
            "state": "CA"
          },
          "dateRange": {
            "checkin": "2026-06-15",
            "checkout": "2026-06-19",
            "nights": 4
          },
          "sites": [
            {
              "campsite_id": "98",
              "site_number": "040",
              "loop": "Upper Pines",
              "campsite_type": "TENT ONLY NONELECTRIC",
              "max_num_people": 6,
              "pets_allowed": "Domestic",
              "availability": {
                "2026-06-15": "Available",
                "2026-06-16": "Available",
                "2026-06-17": "Reserved",
                "2026-06-18": "Available"
              }
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/news-headlines/search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "News Headline Search",
      "description": "Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.",
      "longDescription": "Purpose: Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nBest use: Use this when an agent needs search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: topic, publisher, query, hours, limit, includeContent, minSentiment, maxSentiment, sort.\n\nAccepted fields:\n- topic (optional, string): Optional news topic filter. Use all for the full managed index. Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"; default: \"all\".\n- publisher (optional, string): Optional publisher/feed id filter when the caller already knows the feed label to narrow. Constraints: max length: 80.\n- query (optional, string): Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords. Constraints: max length: 160.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 24 hours and is capped at 24. Constraints: default: 24; min: 1; max: 24.\n- limit (optional, integer): Maximum headline rows to return after filtering and sorting. Constraints: default: 10; min: 1; max: 50.\n- includeContent (optional, boolean): Set true to include a capped cleaned content excerpt when available. Constraints: default: false.\n- minSentiment (optional, number): Optional lower bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- maxSentiment (optional, number): Optional upper bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- sort (optional, string): Sort order for returned headlines. Constraints: accepted values: \"published_desc\", \"published_asc\", \"sentiment_desc\", \"sentiment_asc\"; default: \"published_desc\".\n\nExample request body:\n```json\n{\n  \"topic\": \"tech\",\n  \"query\": \"ai\",\n  \"hours\": 6,\n  \"limit\": 10,\n  \"sort\": \"published_desc\",\n  \"includeContent\": false\n}\n```",
      "category": "public-data",
      "kind": "news-search-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "news",
      "aisle": "News",
      "shelfId": "headlines",
      "shelf": "Headlines",
      "offeringId": "news-headline-search",
      "offering": "News Headline Search",
      "pathIds": [
        "public-data",
        "news",
        "headlines",
        "news-headline-search"
      ],
      "pathLabels": [
        "Public Data",
        "News",
        "Headlines",
        "News Headline Search"
      ],
      "taxonomyPath": "public-data.news.headlines.news-headline-search",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "news",
          "name": "News"
        },
        "shelf": {
          "id": "headlines",
          "name": "Headlines"
        },
        "offering": {
          "id": "news-headline-search",
          "name": "News Headline Search"
        },
        "pathIds": [
          "public-data",
          "news",
          "headlines",
          "news-headline-search"
        ],
        "pathLabels": [
          "Public Data",
          "News",
          "Headlines",
          "News Headline Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "public-data",
        "news",
        "headlines",
        "current-events",
        "topic-filter",
        "sentiment",
        "publisher-links",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "topic": {
            "type": "string",
            "enum": [
              "all",
              "tech",
              "news",
              "business",
              "science",
              "gaming",
              "culture",
              "politics",
              "sports"
            ],
            "default": "all",
            "description": "Optional news topic filter. Use all for the full managed index."
          },
          "publisher": {
            "type": "string",
            "maxLength": 80,
            "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow."
          },
          "query": {
            "type": "string",
            "maxLength": 160,
            "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords."
          },
          "hours": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24,
            "default": 24,
            "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum headline rows to return after filtering and sorting."
          },
          "includeContent": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include a capped cleaned content excerpt when available."
          },
          "minSentiment": {
            "type": "number",
            "minimum": -1,
            "maximum": 1,
            "description": "Optional lower bound for compound sentiment from -1 to 1."
          },
          "maxSentiment": {
            "type": "number",
            "minimum": -1,
            "maximum": 1,
            "description": "Optional upper bound for compound sentiment from -1 to 1."
          },
          "sort": {
            "type": "string",
            "enum": [
              "published_desc",
              "published_asc",
              "sentiment_desc",
              "sentiment_asc"
            ],
            "default": "published_desc",
            "description": "Sort order for returned headlines."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "topic",
          "publisher",
          "query",
          "hours",
          "limit",
          "includeContent",
          "minSentiment",
          "maxSentiment",
          "sort"
        ],
        "fields": [
          {
            "name": "topic",
            "type": "string",
            "required": false,
            "description": "Optional news topic filter. Use all for the full managed index.",
            "constraints": {
              "enum": [
                "all",
                "tech",
                "news",
                "business",
                "science",
                "gaming",
                "culture",
                "politics",
                "sports"
              ],
              "default": "all"
            }
          },
          {
            "name": "publisher",
            "type": "string",
            "required": false,
            "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "hours",
            "type": "integer",
            "required": false,
            "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24.",
            "constraints": {
              "default": 24,
              "minimum": 1,
              "maximum": 24
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum headline rows to return after filtering and sorting.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "includeContent",
            "type": "boolean",
            "required": false,
            "description": "Set true to include a capped cleaned content excerpt when available.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "minSentiment",
            "type": "number",
            "required": false,
            "description": "Optional lower bound for compound sentiment from -1 to 1.",
            "constraints": {
              "minimum": -1,
              "maximum": 1
            }
          },
          {
            "name": "maxSentiment",
            "type": "number",
            "required": false,
            "description": "Optional upper bound for compound sentiment from -1 to 1.",
            "constraints": {
              "minimum": -1,
              "maximum": 1
            }
          },
          {
            "name": "sort",
            "type": "string",
            "required": false,
            "description": "Sort order for returned headlines.",
            "constraints": {
              "enum": [
                "published_desc",
                "published_asc",
                "sentiment_desc",
                "sentiment_asc"
              ],
              "default": "published_desc"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "topic": "tech",
          "query": "ai",
          "hours": 6,
          "limit": 10,
          "sort": "published_desc",
          "includeContent": false
        }
      },
      "exampleRequest": {
        "topic": "tech",
        "query": "ai",
        "hours": 6,
        "limit": 10,
        "sort": "published_desc",
        "includeContent": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "feed",
          "count",
          "headlines",
          "limits",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True when headline search completed."
          },
          "tool": {
            "type": "object",
            "additionalProperties": true,
            "description": "AgentBodega tool metadata."
          },
          "requested": {
            "type": "object",
            "additionalProperties": true,
            "description": "Normalized request filters and caps."
          },
          "feed": {
            "type": "object",
            "additionalProperties": true,
            "description": "Whitelabeled managed index metadata; backend provider URLs are not disclosed."
          },
          "count": {
            "type": "integer",
            "description": "Number of headline rows returned."
          },
          "headlines": {
            "type": "array",
            "description": "Normalized headline rows.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable upstream row id or deterministic fallback."
                },
                "title": {
                  "type": "string",
                  "description": "Headline title."
                },
                "description": {
                  "type": "string",
                  "description": "Short article description or summary."
                },
                "url": {
                  "type": "string",
                  "description": "Publisher article URL."
                },
                "topic": {
                  "type": "string",
                  "description": "Assigned topic bucket."
                },
                "publisher": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Publisher/feed label when available."
                },
                "publishedAt": {
                  "type": "string",
                  "description": "Article publish timestamp when available."
                },
                "insertedAt": {
                  "type": "string",
                  "description": "Index insertion timestamp when available."
                },
                "age": {
                  "type": "string",
                  "description": "Short relative age label from the managed index."
                },
                "keywords": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Keyword labels when available."
                },
                "sentiment": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Compound, positive, negative, and neutral sentiment hints when available."
                },
                "contentText": {
                  "type": "string",
                  "description": "Optional capped cleaned content excerpt when includeContent is true."
                }
              },
              "additionalProperties": true
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true,
            "description": "Published caps for this route."
          },
          "checkedAt": {
            "type": "string",
            "description": "Server-side ISO timestamp for this search."
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "news-headline-search",
          "name": "News Headline Search",
          "department": "Public Data"
        },
        "requested": {
          "topic": "tech",
          "query": "ai",
          "hours": 6,
          "limit": 10,
          "sort": "published_desc",
          "includeContent": false
        },
        "feed": {
          "type": "managed-news-index",
          "windowHours": 6,
          "upstreamDetailsDisclosed": false,
          "storyDedupeApplied": true
        },
        "count": 1,
        "headlines": [
          {
            "id": "headline_example",
            "title": "AI infrastructure startup announces new agent workflow tools",
            "description": "The company described new tools for faster agent research and data retrieval.",
            "url": "https://publisher.example/news/ai-agent-workflow-tools",
            "topic": "tech",
            "publisher": {
              "id": "publisher-example",
              "domain": "publisher.example"
            },
            "publishedAt": "2026-07-07T19:35:14.000Z",
            "insertedAt": "2026-07-07T19:36:00.000Z",
            "age": "24m",
            "keywords": [
              "AI",
              "agents",
              "workflow"
            ],
            "sentiment": {
              "compound": 0.12,
              "positive": 0.18,
              "negative": 0.02,
              "neutral": 0.8
            }
          }
        ],
        "limits": {
          "maxLimit": 50,
          "maxLookbackHours": 24,
          "maxContentChars": 1500
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "topic": "tech",
                "query": "ai",
                "hours": 6,
                "limit": 10,
                "sort": "published_desc",
                "includeContent": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "news-headline-search",
                  "name": "News Headline Search",
                  "department": "Public Data"
                },
                "requested": {
                  "topic": "tech",
                  "query": "ai",
                  "hours": 6,
                  "limit": 10,
                  "sort": "published_desc",
                  "includeContent": false
                },
                "feed": {
                  "type": "managed-news-index",
                  "windowHours": 6,
                  "upstreamDetailsDisclosed": false,
                  "storyDedupeApplied": true
                },
                "count": 1,
                "headlines": [
                  {
                    "id": "headline_example",
                    "title": "AI infrastructure startup announces new agent workflow tools",
                    "description": "The company described new tools for faster agent research and data retrieval.",
                    "url": "https://publisher.example/news/ai-agent-workflow-tools",
                    "topic": "tech",
                    "publisher": {
                      "id": "publisher-example",
                      "domain": "publisher.example"
                    },
                    "publishedAt": "2026-07-07T19:35:14.000Z",
                    "insertedAt": "2026-07-07T19:36:00.000Z",
                    "age": "24m",
                    "keywords": [
                      "AI",
                      "agents",
                      "workflow"
                    ],
                    "sentiment": {
                      "compound": 0.12,
                      "positive": 0.18,
                      "negative": 0.02,
                      "neutral": 0.8
                    }
                  }
                ],
                "limits": {
                  "maxLimit": 50,
                  "maxLookbackHours": 24,
                  "maxContentChars": 1500
                }
              }
            }
          },
          "routeTemplate": "/api/public-data/news-headlines/search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "topic": {
                        "type": "string",
                        "enum": [
                          "all",
                          "tech",
                          "news",
                          "business",
                          "science",
                          "gaming",
                          "culture",
                          "politics",
                          "sports"
                        ],
                        "default": "all",
                        "description": "Optional news topic filter. Use all for the full managed index."
                      },
                      "publisher": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow."
                      },
                      "query": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords."
                      },
                      "hours": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 24,
                        "default": 24,
                        "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 50,
                        "default": 10,
                        "description": "Maximum headline rows to return after filtering and sorting."
                      },
                      "includeContent": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include a capped cleaned content excerpt when available."
                      },
                      "minSentiment": {
                        "type": "number",
                        "minimum": -1,
                        "maximum": 1,
                        "description": "Optional lower bound for compound sentiment from -1 to 1."
                      },
                      "maxSentiment": {
                        "type": "number",
                        "minimum": -1,
                        "maximum": 1,
                        "description": "Optional upper bound for compound sentiment from -1 to 1."
                      },
                      "sort": {
                        "type": "string",
                        "enum": [
                          "published_desc",
                          "published_asc",
                          "sentiment_desc",
                          "sentiment_asc"
                        ],
                        "default": "published_desc",
                        "description": "Sort order for returned headlines."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "feed",
                      "count",
                      "headlines",
                      "limits",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True when headline search completed."
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "AgentBodega tool metadata."
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Normalized request filters and caps."
                      },
                      "feed": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Whitelabeled managed index metadata; backend provider URLs are not disclosed."
                      },
                      "count": {
                        "type": "integer",
                        "description": "Number of headline rows returned."
                      },
                      "headlines": {
                        "type": "array",
                        "description": "Normalized headline rows.",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "description": "Stable upstream row id or deterministic fallback."
                            },
                            "title": {
                              "type": "string",
                              "description": "Headline title."
                            },
                            "description": {
                              "type": "string",
                              "description": "Short article description or summary."
                            },
                            "url": {
                              "type": "string",
                              "description": "Publisher article URL."
                            },
                            "topic": {
                              "type": "string",
                              "description": "Assigned topic bucket."
                            },
                            "publisher": {
                              "type": "object",
                              "additionalProperties": true,
                              "description": "Publisher/feed label when available."
                            },
                            "publishedAt": {
                              "type": "string",
                              "description": "Article publish timestamp when available."
                            },
                            "insertedAt": {
                              "type": "string",
                              "description": "Index insertion timestamp when available."
                            },
                            "age": {
                              "type": "string",
                              "description": "Short relative age label from the managed index."
                            },
                            "keywords": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "description": "Keyword labels when available."
                            },
                            "sentiment": {
                              "type": "object",
                              "additionalProperties": true,
                              "description": "Compound, positive, negative, and neutral sentiment hints when available."
                            },
                            "contentText": {
                              "type": "string",
                              "description": "Optional capped cleaned content excerpt when includeContent is true."
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Published caps for this route."
                      },
                      "checkedAt": {
                        "type": "string",
                        "description": "Server-side ISO timestamp for this search."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "news-headline-search",
            "url": "https://agentbodega.store/api/public-data/news-headlines/search",
            "method": "POST",
            "description": "Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.",
            "longDescription": "Purpose: Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nBest use: Use this when an agent needs search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: topic, publisher, query, hours, limit, includeContent, minSentiment, maxSentiment, sort.\n\nAccepted fields:\n- topic (optional, string): Optional news topic filter. Use all for the full managed index. Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"; default: \"all\".\n- publisher (optional, string): Optional publisher/feed id filter when the caller already knows the feed label to narrow. Constraints: max length: 80.\n- query (optional, string): Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords. Constraints: max length: 160.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 24 hours and is capped at 24. Constraints: default: 24; min: 1; max: 24.\n- limit (optional, integer): Maximum headline rows to return after filtering and sorting. Constraints: default: 10; min: 1; max: 50.\n- includeContent (optional, boolean): Set true to include a capped cleaned content excerpt when available. Constraints: default: false.\n- minSentiment (optional, number): Optional lower bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- maxSentiment (optional, number): Optional upper bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- sort (optional, string): Sort order for returned headlines. Constraints: accepted values: \"published_desc\", \"published_asc\", \"sentiment_desc\", \"sentiment_asc\"; default: \"published_desc\".\n\nExample request body:\n```json\n{\n  \"topic\": \"tech\",\n  \"query\": \"ai\",\n  \"hours\": 6,\n  \"limit\": 10,\n  \"sort\": \"published_desc\",\n  \"includeContent\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "News Headline Search",
            "category": "public-data",
            "kind": "news-search-tool",
            "tags": [
              "public-data",
              "news",
              "headlines",
              "current-events",
              "topic-filter",
              "sentiment",
              "publisher-links",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "topic",
                "publisher",
                "query",
                "hours",
                "limit",
                "includeContent",
                "minSentiment",
                "maxSentiment",
                "sort"
              ],
              "fields": [
                {
                  "name": "topic",
                  "type": "string",
                  "required": false,
                  "description": "Optional news topic filter. Use all for the full managed index.",
                  "constraints": {
                    "enum": [
                      "all",
                      "tech",
                      "news",
                      "business",
                      "science",
                      "gaming",
                      "culture",
                      "politics",
                      "sports"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "publisher",
                  "type": "string",
                  "required": false,
                  "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "hours",
                  "type": "integer",
                  "required": false,
                  "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24.",
                  "constraints": {
                    "default": 24,
                    "minimum": 1,
                    "maximum": 24
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum headline rows to return after filtering and sorting.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 50
                  }
                },
                {
                  "name": "includeContent",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include a capped cleaned content excerpt when available.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "minSentiment",
                  "type": "number",
                  "required": false,
                  "description": "Optional lower bound for compound sentiment from -1 to 1.",
                  "constraints": {
                    "minimum": -1,
                    "maximum": 1
                  }
                },
                {
                  "name": "maxSentiment",
                  "type": "number",
                  "required": false,
                  "description": "Optional upper bound for compound sentiment from -1 to 1.",
                  "constraints": {
                    "minimum": -1,
                    "maximum": 1
                  }
                },
                {
                  "name": "sort",
                  "type": "string",
                  "required": false,
                  "description": "Sort order for returned headlines.",
                  "constraints": {
                    "enum": [
                      "published_desc",
                      "published_asc",
                      "sentiment_desc",
                      "sentiment_asc"
                    ],
                    "default": "published_desc"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "topic": "tech",
                "query": "ai",
                "hours": 6,
                "limit": 10,
                "sort": "published_desc",
                "includeContent": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "topic": {
                  "type": "string",
                  "enum": [
                    "all",
                    "tech",
                    "news",
                    "business",
                    "science",
                    "gaming",
                    "culture",
                    "politics",
                    "sports"
                  ],
                  "default": "all",
                  "description": "Optional news topic filter. Use all for the full managed index."
                },
                "publisher": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow."
                },
                "query": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords."
                },
                "hours": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 24,
                  "default": 24,
                  "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 50,
                  "default": 10,
                  "description": "Maximum headline rows to return after filtering and sorting."
                },
                "includeContent": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include a capped cleaned content excerpt when available."
                },
                "minSentiment": {
                  "type": "number",
                  "minimum": -1,
                  "maximum": 1,
                  "description": "Optional lower bound for compound sentiment from -1 to 1."
                },
                "maxSentiment": {
                  "type": "number",
                  "minimum": -1,
                  "maximum": 1,
                  "description": "Optional upper bound for compound sentiment from -1 to 1."
                },
                "sort": {
                  "type": "string",
                  "enum": [
                    "published_desc",
                    "published_asc",
                    "sentiment_desc",
                    "sentiment_asc"
                  ],
                  "default": "published_desc",
                  "description": "Sort order for returned headlines."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "feed",
                "count",
                "headlines",
                "limits",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True when headline search completed."
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "AgentBodega tool metadata."
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Normalized request filters and caps."
                },
                "feed": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Whitelabeled managed index metadata; backend provider URLs are not disclosed."
                },
                "count": {
                  "type": "integer",
                  "description": "Number of headline rows returned."
                },
                "headlines": {
                  "type": "array",
                  "description": "Normalized headline rows.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Stable upstream row id or deterministic fallback."
                      },
                      "title": {
                        "type": "string",
                        "description": "Headline title."
                      },
                      "description": {
                        "type": "string",
                        "description": "Short article description or summary."
                      },
                      "url": {
                        "type": "string",
                        "description": "Publisher article URL."
                      },
                      "topic": {
                        "type": "string",
                        "description": "Assigned topic bucket."
                      },
                      "publisher": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Publisher/feed label when available."
                      },
                      "publishedAt": {
                        "type": "string",
                        "description": "Article publish timestamp when available."
                      },
                      "insertedAt": {
                        "type": "string",
                        "description": "Index insertion timestamp when available."
                      },
                      "age": {
                        "type": "string",
                        "description": "Short relative age label from the managed index."
                      },
                      "keywords": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "Keyword labels when available."
                      },
                      "sentiment": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Compound, positive, negative, and neutral sentiment hints when available."
                      },
                      "contentText": {
                        "type": "string",
                        "description": "Optional capped cleaned content excerpt when includeContent is true."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Published caps for this route."
                },
                "checkedAt": {
                  "type": "string",
                  "description": "Server-side ISO timestamp for this search."
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/news-headlines/search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/news-headlines/search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "news-search-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "news",
          "aisle": "News",
          "shelfId": "headlines",
          "shelf": "Headlines",
          "offeringId": "news-headline-search",
          "offering": "News Headline Search",
          "pathIds": [
            "public-data",
            "news",
            "headlines",
            "news-headline-search"
          ],
          "pathLabels": [
            "Public Data",
            "News",
            "Headlines",
            "News Headline Search"
          ],
          "taxonomyPath": "public-data.news.headlines.news-headline-search",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "news",
              "name": "News"
            },
            "shelf": {
              "id": "headlines",
              "name": "Headlines"
            },
            "offering": {
              "id": "news-headline-search",
              "name": "News Headline Search"
            },
            "pathIds": [
              "public-data",
              "news",
              "headlines",
              "news-headline-search"
            ],
            "pathLabels": [
              "Public Data",
              "News",
              "Headlines",
              "News Headline Search"
            ]
          }
        },
        "description": {
          "short": "Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.",
          "full": "Purpose: Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nBest use: Use this when an agent needs search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: topic, publisher, query, hours, limit, includeContent, minSentiment, maxSentiment, sort.\n\nAccepted fields:\n- topic (optional, string): Optional news topic filter. Use all for the full managed index. Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"; default: \"all\".\n- publisher (optional, string): Optional publisher/feed id filter when the caller already knows the feed label to narrow. Constraints: max length: 80.\n- query (optional, string): Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords. Constraints: max length: 160.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 24 hours and is capped at 24. Constraints: default: 24; min: 1; max: 24.\n- limit (optional, integer): Maximum headline rows to return after filtering and sorting. Constraints: default: 10; min: 1; max: 50.\n- includeContent (optional, boolean): Set true to include a capped cleaned content excerpt when available. Constraints: default: false.\n- minSentiment (optional, number): Optional lower bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- maxSentiment (optional, number): Optional upper bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- sort (optional, string): Sort order for returned headlines. Constraints: accepted values: \"published_desc\", \"published_asc\", \"sentiment_desc\", \"sentiment_asc\"; default: \"published_desc\".\n\nExample request body:\n```json\n{\n  \"topic\": \"tech\",\n  \"query\": \"ai\",\n  \"hours\": 6,\n  \"limit\": 10,\n  \"sort\": \"published_desc\",\n  \"includeContent\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "topic": {
              "type": "string",
              "enum": [
                "all",
                "tech",
                "news",
                "business",
                "science",
                "gaming",
                "culture",
                "politics",
                "sports"
              ],
              "default": "all",
              "description": "Optional news topic filter. Use all for the full managed index."
            },
            "publisher": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow."
            },
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords."
            },
            "hours": {
              "type": "integer",
              "minimum": 1,
              "maximum": 24,
              "default": 24,
              "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10,
              "description": "Maximum headline rows to return after filtering and sorting."
            },
            "includeContent": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include a capped cleaned content excerpt when available."
            },
            "minSentiment": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Optional lower bound for compound sentiment from -1 to 1."
            },
            "maxSentiment": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Optional upper bound for compound sentiment from -1 to 1."
            },
            "sort": {
              "type": "string",
              "enum": [
                "published_desc",
                "published_asc",
                "sentiment_desc",
                "sentiment_asc"
              ],
              "default": "published_desc",
              "description": "Sort order for returned headlines."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "topic": {
              "type": "string",
              "enum": [
                "all",
                "tech",
                "news",
                "business",
                "science",
                "gaming",
                "culture",
                "politics",
                "sports"
              ],
              "default": "all",
              "description": "Optional news topic filter. Use all for the full managed index."
            },
            "publisher": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow."
            },
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords."
            },
            "hours": {
              "type": "integer",
              "minimum": 1,
              "maximum": 24,
              "default": 24,
              "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10,
              "description": "Maximum headline rows to return after filtering and sorting."
            },
            "includeContent": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include a capped cleaned content excerpt when available."
            },
            "minSentiment": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Optional lower bound for compound sentiment from -1 to 1."
            },
            "maxSentiment": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Optional upper bound for compound sentiment from -1 to 1."
            },
            "sort": {
              "type": "string",
              "enum": [
                "published_desc",
                "published_asc",
                "sentiment_desc",
                "sentiment_asc"
              ],
              "default": "published_desc",
              "description": "Sort order for returned headlines."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "topic",
            "publisher",
            "query",
            "hours",
            "limit",
            "includeContent",
            "minSentiment",
            "maxSentiment",
            "sort"
          ],
          "fields": [
            {
              "name": "topic",
              "type": "string",
              "required": false,
              "description": "Optional news topic filter. Use all for the full managed index.",
              "constraints": {
                "enum": [
                  "all",
                  "tech",
                  "news",
                  "business",
                  "science",
                  "gaming",
                  "culture",
                  "politics",
                  "sports"
                ],
                "default": "all"
              }
            },
            {
              "name": "publisher",
              "type": "string",
              "required": false,
              "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "hours",
              "type": "integer",
              "required": false,
              "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24.",
              "constraints": {
                "default": 24,
                "minimum": 1,
                "maximum": 24
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum headline rows to return after filtering and sorting.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 50
              }
            },
            {
              "name": "includeContent",
              "type": "boolean",
              "required": false,
              "description": "Set true to include a capped cleaned content excerpt when available.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "minSentiment",
              "type": "number",
              "required": false,
              "description": "Optional lower bound for compound sentiment from -1 to 1.",
              "constraints": {
                "minimum": -1,
                "maximum": 1
              }
            },
            {
              "name": "maxSentiment",
              "type": "number",
              "required": false,
              "description": "Optional upper bound for compound sentiment from -1 to 1.",
              "constraints": {
                "minimum": -1,
                "maximum": 1
              }
            },
            {
              "name": "sort",
              "type": "string",
              "required": false,
              "description": "Sort order for returned headlines.",
              "constraints": {
                "enum": [
                  "published_desc",
                  "published_asc",
                  "sentiment_desc",
                  "sentiment_asc"
                ],
                "default": "published_desc"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "topic": "tech",
            "query": "ai",
            "hours": 6,
            "limit": 10,
            "sort": "published_desc",
            "includeContent": false
          }
        },
        "exampleRequest": {
          "topic": "tech",
          "query": "ai",
          "hours": 6,
          "limit": 10,
          "sort": "published_desc",
          "includeContent": false
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "feed",
            "count",
            "headlines",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when headline search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "feed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Whitelabeled managed index metadata; backend provider URLs are not disclosed."
            },
            "count": {
              "type": "integer",
              "description": "Number of headline rows returned."
            },
            "headlines": {
              "type": "array",
              "description": "Normalized headline rows.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable upstream row id or deterministic fallback."
                  },
                  "title": {
                    "type": "string",
                    "description": "Headline title."
                  },
                  "description": {
                    "type": "string",
                    "description": "Short article description or summary."
                  },
                  "url": {
                    "type": "string",
                    "description": "Publisher article URL."
                  },
                  "topic": {
                    "type": "string",
                    "description": "Assigned topic bucket."
                  },
                  "publisher": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Publisher/feed label when available."
                  },
                  "publishedAt": {
                    "type": "string",
                    "description": "Article publish timestamp when available."
                  },
                  "insertedAt": {
                    "type": "string",
                    "description": "Index insertion timestamp when available."
                  },
                  "age": {
                    "type": "string",
                    "description": "Short relative age label from the managed index."
                  },
                  "keywords": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Keyword labels when available."
                  },
                  "sentiment": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Compound, positive, negative, and neutral sentiment hints when available."
                  },
                  "contentText": {
                    "type": "string",
                    "description": "Optional capped cleaned content excerpt when includeContent is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for this search."
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "feed",
            "count",
            "headlines",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when headline search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "feed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Whitelabeled managed index metadata; backend provider URLs are not disclosed."
            },
            "count": {
              "type": "integer",
              "description": "Number of headline rows returned."
            },
            "headlines": {
              "type": "array",
              "description": "Normalized headline rows.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable upstream row id or deterministic fallback."
                  },
                  "title": {
                    "type": "string",
                    "description": "Headline title."
                  },
                  "description": {
                    "type": "string",
                    "description": "Short article description or summary."
                  },
                  "url": {
                    "type": "string",
                    "description": "Publisher article URL."
                  },
                  "topic": {
                    "type": "string",
                    "description": "Assigned topic bucket."
                  },
                  "publisher": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Publisher/feed label when available."
                  },
                  "publishedAt": {
                    "type": "string",
                    "description": "Article publish timestamp when available."
                  },
                  "insertedAt": {
                    "type": "string",
                    "description": "Index insertion timestamp when available."
                  },
                  "age": {
                    "type": "string",
                    "description": "Short relative age label from the managed index."
                  },
                  "keywords": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Keyword labels when available."
                  },
                  "sentiment": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Compound, positive, negative, and neutral sentiment hints when available."
                  },
                  "contentText": {
                    "type": "string",
                    "description": "Optional capped cleaned content excerpt when includeContent is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for this search."
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "news-headline-search",
            "name": "News Headline Search",
            "department": "Public Data"
          },
          "requested": {
            "topic": "tech",
            "query": "ai",
            "hours": 6,
            "limit": 10,
            "sort": "published_desc",
            "includeContent": false
          },
          "feed": {
            "type": "managed-news-index",
            "windowHours": 6,
            "upstreamDetailsDisclosed": false,
            "storyDedupeApplied": true
          },
          "count": 1,
          "headlines": [
            {
              "id": "headline_example",
              "title": "AI infrastructure startup announces new agent workflow tools",
              "description": "The company described new tools for faster agent research and data retrieval.",
              "url": "https://publisher.example/news/ai-agent-workflow-tools",
              "topic": "tech",
              "publisher": {
                "id": "publisher-example",
                "domain": "publisher.example"
              },
              "publishedAt": "2026-07-07T19:35:14.000Z",
              "insertedAt": "2026-07-07T19:36:00.000Z",
              "age": "24m",
              "keywords": [
                "AI",
                "agents",
                "workflow"
              ],
              "sentiment": {
                "compound": 0.12,
                "positive": 0.18,
                "negative": 0.02,
                "neutral": 0.8
              }
            }
          ],
          "limits": {
            "maxLimit": 50,
            "maxLookbackHours": 24,
            "maxContentChars": 1500
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/news-briefing/summary",
      "type": "http",
      "x402Version": 2,
      "serviceName": "News Briefing Summary",
      "description": "Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.",
      "longDescription": "Purpose: Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nBest use: Use this when an agent needs return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, limit.\n\nAccepted fields:\n- query (optional, string): Optional case-insensitive filter matched against briefing titles and summary text. Constraints: max length: 160.\n- limit (optional, integer): Maximum briefing items to return. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"query\": \"technology\",\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "news-briefing-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "news",
      "aisle": "News",
      "shelfId": "briefings",
      "shelf": "Briefings",
      "offeringId": "news-briefing-summary",
      "offering": "News Briefing Summary",
      "pathIds": [
        "public-data",
        "news",
        "briefings",
        "news-briefing-summary"
      ],
      "pathLabels": [
        "Public Data",
        "News",
        "Briefings",
        "News Briefing Summary"
      ],
      "taxonomyPath": "public-data.news.briefings.news-briefing-summary",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "news",
          "name": "News"
        },
        "shelf": {
          "id": "briefings",
          "name": "Briefings"
        },
        "offering": {
          "id": "news-briefing-summary",
          "name": "News Briefing Summary"
        },
        "pathIds": [
          "public-data",
          "news",
          "briefings",
          "news-briefing-summary"
        ],
        "pathLabels": [
          "Public Data",
          "News",
          "Briefings",
          "News Briefing Summary"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "public-data",
        "news",
        "briefing",
        "summary",
        "current-events",
        "situational-awareness",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 160,
            "description": "Optional case-insensitive filter matched against briefing titles and summary text."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 10,
            "description": "Maximum briefing items to return."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "limit"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional case-insensitive filter matched against briefing titles and summary text.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum briefing items to return.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 20
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "technology",
          "limit": 10
        }
      },
      "exampleRequest": {
        "query": "technology",
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "briefing",
          "count",
          "items",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True when the briefing was parsed."
          },
          "tool": {
            "type": "object",
            "additionalProperties": true,
            "description": "AgentBodega tool metadata."
          },
          "requested": {
            "type": "object",
            "additionalProperties": true,
            "description": "Normalized request filters and caps."
          },
          "briefing": {
            "type": "object",
            "additionalProperties": true,
            "description": "Whitelabeled briefing metadata and refresh cadence."
          },
          "count": {
            "type": "integer",
            "description": "Number of briefing items returned."
          },
          "items": {
            "type": "array",
            "description": "Briefing items in source order.",
            "items": {
              "type": "object",
              "required": [
                "rank",
                "title",
                "summary"
              ],
              "properties": {
                "rank": {
                  "type": "integer",
                  "description": "One-based rank in the briefing."
                },
                "title": {
                  "type": "string",
                  "description": "Briefing topic or headline."
                },
                "summary": {
                  "type": "string",
                  "description": "Compact summary of the development."
                }
              },
              "additionalProperties": false
            }
          },
          "checkedAt": {
            "type": "string",
            "description": "Server-side ISO timestamp for this briefing fetch."
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "news-briefing-summary",
          "name": "News Briefing Summary",
          "department": "Public Data"
        },
        "requested": {
          "query": "technology",
          "limit": 10
        },
        "briefing": {
          "window": "rolling_24h",
          "refreshCadence": "multiple-times-daily",
          "upstreamDetailsDisclosed": false
        },
        "count": 1,
        "items": [
          {
            "rank": 1,
            "title": "Technology stocks rebound",
            "summary": "Several technology names recovered after new product announcements and stronger demand commentary."
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "technology",
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "news-briefing-summary",
                  "name": "News Briefing Summary",
                  "department": "Public Data"
                },
                "requested": {
                  "query": "technology",
                  "limit": 10
                },
                "briefing": {
                  "window": "rolling_24h",
                  "refreshCadence": "multiple-times-daily",
                  "upstreamDetailsDisclosed": false
                },
                "count": 1,
                "items": [
                  {
                    "rank": 1,
                    "title": "Technology stocks rebound",
                    "summary": "Several technology names recovered after new product announcements and stronger demand commentary."
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/news-briefing/summary",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Optional case-insensitive filter matched against briefing titles and summary text."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 10,
                        "description": "Maximum briefing items to return."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "briefing",
                      "count",
                      "items",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True when the briefing was parsed."
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "AgentBodega tool metadata."
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Normalized request filters and caps."
                      },
                      "briefing": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Whitelabeled briefing metadata and refresh cadence."
                      },
                      "count": {
                        "type": "integer",
                        "description": "Number of briefing items returned."
                      },
                      "items": {
                        "type": "array",
                        "description": "Briefing items in source order.",
                        "items": {
                          "type": "object",
                          "required": [
                            "rank",
                            "title",
                            "summary"
                          ],
                          "properties": {
                            "rank": {
                              "type": "integer",
                              "description": "One-based rank in the briefing."
                            },
                            "title": {
                              "type": "string",
                              "description": "Briefing topic or headline."
                            },
                            "summary": {
                              "type": "string",
                              "description": "Compact summary of the development."
                            }
                          },
                          "additionalProperties": false
                        }
                      },
                      "checkedAt": {
                        "type": "string",
                        "description": "Server-side ISO timestamp for this briefing fetch."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "news-briefing-summary",
            "url": "https://agentbodega.store/api/public-data/news-briefing/summary",
            "method": "POST",
            "description": "Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.",
            "longDescription": "Purpose: Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nBest use: Use this when an agent needs return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, limit.\n\nAccepted fields:\n- query (optional, string): Optional case-insensitive filter matched against briefing titles and summary text. Constraints: max length: 160.\n- limit (optional, integer): Maximum briefing items to return. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"query\": \"technology\",\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "News Briefing Summary",
            "category": "public-data",
            "kind": "news-briefing-tool",
            "tags": [
              "public-data",
              "news",
              "briefing",
              "summary",
              "current-events",
              "situational-awareness",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "limit"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional case-insensitive filter matched against briefing titles and summary text.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum briefing items to return.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 20
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "technology",
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "query": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional case-insensitive filter matched against briefing titles and summary text."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 10,
                  "description": "Maximum briefing items to return."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "briefing",
                "count",
                "items",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True when the briefing was parsed."
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "AgentBodega tool metadata."
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Normalized request filters and caps."
                },
                "briefing": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Whitelabeled briefing metadata and refresh cadence."
                },
                "count": {
                  "type": "integer",
                  "description": "Number of briefing items returned."
                },
                "items": {
                  "type": "array",
                  "description": "Briefing items in source order.",
                  "items": {
                    "type": "object",
                    "required": [
                      "rank",
                      "title",
                      "summary"
                    ],
                    "properties": {
                      "rank": {
                        "type": "integer",
                        "description": "One-based rank in the briefing."
                      },
                      "title": {
                        "type": "string",
                        "description": "Briefing topic or headline."
                      },
                      "summary": {
                        "type": "string",
                        "description": "Compact summary of the development."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "checkedAt": {
                  "type": "string",
                  "description": "Server-side ISO timestamp for this briefing fetch."
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/news-briefing/summary",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/news-briefing/summary",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "news-briefing-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "news",
          "aisle": "News",
          "shelfId": "briefings",
          "shelf": "Briefings",
          "offeringId": "news-briefing-summary",
          "offering": "News Briefing Summary",
          "pathIds": [
            "public-data",
            "news",
            "briefings",
            "news-briefing-summary"
          ],
          "pathLabels": [
            "Public Data",
            "News",
            "Briefings",
            "News Briefing Summary"
          ],
          "taxonomyPath": "public-data.news.briefings.news-briefing-summary",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "news",
              "name": "News"
            },
            "shelf": {
              "id": "briefings",
              "name": "Briefings"
            },
            "offering": {
              "id": "news-briefing-summary",
              "name": "News Briefing Summary"
            },
            "pathIds": [
              "public-data",
              "news",
              "briefings",
              "news-briefing-summary"
            ],
            "pathLabels": [
              "Public Data",
              "News",
              "Briefings",
              "News Briefing Summary"
            ]
          }
        },
        "description": {
          "short": "Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.",
          "full": "Purpose: Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nBest use: Use this when an agent needs return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, limit.\n\nAccepted fields:\n- query (optional, string): Optional case-insensitive filter matched against briefing titles and summary text. Constraints: max length: 160.\n- limit (optional, integer): Maximum briefing items to return. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"query\": \"technology\",\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional case-insensitive filter matched against briefing titles and summary text."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum briefing items to return."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional case-insensitive filter matched against briefing titles and summary text."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum briefing items to return."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "limit"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional case-insensitive filter matched against briefing titles and summary text.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum briefing items to return.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 20
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "technology",
            "limit": 10
          }
        },
        "exampleRequest": {
          "query": "technology",
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "briefing",
            "count",
            "items",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the briefing was parsed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "briefing": {
              "type": "object",
              "additionalProperties": true,
              "description": "Whitelabeled briefing metadata and refresh cadence."
            },
            "count": {
              "type": "integer",
              "description": "Number of briefing items returned."
            },
            "items": {
              "type": "array",
              "description": "Briefing items in source order.",
              "items": {
                "type": "object",
                "required": [
                  "rank",
                  "title",
                  "summary"
                ],
                "properties": {
                  "rank": {
                    "type": "integer",
                    "description": "One-based rank in the briefing."
                  },
                  "title": {
                    "type": "string",
                    "description": "Briefing topic or headline."
                  },
                  "summary": {
                    "type": "string",
                    "description": "Compact summary of the development."
                  }
                },
                "additionalProperties": false
              }
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for this briefing fetch."
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "briefing",
            "count",
            "items",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the briefing was parsed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "briefing": {
              "type": "object",
              "additionalProperties": true,
              "description": "Whitelabeled briefing metadata and refresh cadence."
            },
            "count": {
              "type": "integer",
              "description": "Number of briefing items returned."
            },
            "items": {
              "type": "array",
              "description": "Briefing items in source order.",
              "items": {
                "type": "object",
                "required": [
                  "rank",
                  "title",
                  "summary"
                ],
                "properties": {
                  "rank": {
                    "type": "integer",
                    "description": "One-based rank in the briefing."
                  },
                  "title": {
                    "type": "string",
                    "description": "Briefing topic or headline."
                  },
                  "summary": {
                    "type": "string",
                    "description": "Compact summary of the development."
                  }
                },
                "additionalProperties": false
              }
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for this briefing fetch."
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "news-briefing-summary",
            "name": "News Briefing Summary",
            "department": "Public Data"
          },
          "requested": {
            "query": "technology",
            "limit": 10
          },
          "briefing": {
            "window": "rolling_24h",
            "refreshCadence": "multiple-times-daily",
            "upstreamDetailsDisclosed": false
          },
          "count": 1,
          "items": [
            {
              "rank": 1,
              "title": "Technology stocks rebound",
              "summary": "Several technology names recovered after new product announcements and stronger demand commentary."
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/news/morning-briefing",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Morning Briefing",
      "description": "Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.",
      "longDescription": "Purpose: Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nBest use: Use this when an agent needs build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: focus, topics, hours, maxItemsPerSection, includeCitations.\n\nAccepted fields:\n- focus (optional, string): Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name. Constraints: max length: 160.\n- topics (optional, array): Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index. Constraints: max items: 6.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 12 hours and is capped at 24. Constraints: default: 12; min: 1; max: 24.\n- maxItemsPerSection (optional, integer): Maximum normalized headline rows returned in each briefing section. Constraints: default: 4; min: 1; max: 8.\n- includeCitations (optional, boolean): Set false to omit the flattened citation list while keeping URLs on section items. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"focus\": \"ai markets\",\n  \"topics\": [\n    \"news\",\n    \"business\",\n    \"tech\"\n  ],\n  \"hours\": 12,\n  \"maxItemsPerSection\": 4,\n  \"includeCitations\": true\n}\n```",
      "category": "public-data",
      "kind": "news-briefing-bundle",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "news",
      "aisle": "News",
      "shelfId": "briefings",
      "shelf": "Briefings",
      "offeringId": "news-morning-briefing",
      "offering": "Morning Briefing",
      "pathIds": [
        "public-data",
        "news",
        "briefings",
        "news-morning-briefing"
      ],
      "pathLabels": [
        "Public Data",
        "News",
        "Briefings",
        "Morning Briefing"
      ],
      "taxonomyPath": "public-data.news.briefings.news-morning-briefing",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "news",
          "name": "News"
        },
        "shelf": {
          "id": "briefings",
          "name": "Briefings"
        },
        "offering": {
          "id": "news-morning-briefing",
          "name": "Morning Briefing"
        },
        "pathIds": [
          "public-data",
          "news",
          "briefings",
          "news-morning-briefing"
        ],
        "pathLabels": [
          "Public Data",
          "News",
          "Briefings",
          "Morning Briefing"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "public-data",
        "news",
        "briefing",
        "morning-briefing",
        "markets",
        "ai",
        "crypto",
        "current-events",
        "citations",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "30000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "30000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "focus": {
            "type": "string",
            "maxLength": 160,
            "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name."
          },
          "topics": {
            "type": "array",
            "maxItems": 6,
            "items": {
              "type": "string",
              "enum": [
                "all",
                "tech",
                "news",
                "business",
                "science",
                "gaming",
                "culture",
                "politics",
                "sports"
              ],
              "description": "Topics item filter for Morning Briefing. Accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\". Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"."
            },
            "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index."
          },
          "hours": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24,
            "default": 12,
            "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24."
          },
          "maxItemsPerSection": {
            "type": "integer",
            "minimum": 1,
            "maximum": 8,
            "default": 4,
            "description": "Maximum normalized headline rows returned in each briefing section."
          },
          "includeCitations": {
            "type": "boolean",
            "default": true,
            "description": "Set false to omit the flattened citation list while keeping URLs on section items."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "focus",
          "topics",
          "hours",
          "maxItemsPerSection",
          "includeCitations"
        ],
        "fields": [
          {
            "name": "focus",
            "type": "string",
            "required": false,
            "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "topics",
            "type": "array",
            "required": false,
            "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index.",
            "constraints": {
              "maxItems": 6
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "hours",
            "type": "integer",
            "required": false,
            "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24.",
            "constraints": {
              "default": 12,
              "minimum": 1,
              "maximum": 24
            }
          },
          {
            "name": "maxItemsPerSection",
            "type": "integer",
            "required": false,
            "description": "Maximum normalized headline rows returned in each briefing section.",
            "constraints": {
              "default": 4,
              "minimum": 1,
              "maximum": 8
            }
          },
          {
            "name": "includeCitations",
            "type": "boolean",
            "required": false,
            "description": "Set false to omit the flattened citation list while keeping URLs on section items.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "focus": "ai markets",
          "topics": [
            "news",
            "business",
            "tech"
          ],
          "hours": 12,
          "maxItemsPerSection": 4,
          "includeCitations": true
        }
      },
      "exampleRequest": {
        "focus": "ai markets",
        "topics": [
          "news",
          "business",
          "tech"
        ],
        "hours": 12,
        "maxItemsPerSection": 4,
        "includeCitations": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "briefing",
          "sections",
          "topStories",
          "limits",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True when the briefing completed."
          },
          "tool": {
            "type": "object",
            "additionalProperties": true,
            "description": "AgentBodega tool metadata."
          },
          "requested": {
            "type": "object",
            "additionalProperties": true,
            "description": "Normalized request filters and caps."
          },
          "briefing": {
            "type": "object",
            "additionalProperties": true,
            "description": "High-level bundle summary, ranking/diversity policy, section count, item count, and source-disclosure policy."
          },
          "sections": {
            "type": "array",
            "description": "Briefing sections grouped by agent-relevant intent.",
            "items": {
              "type": "object",
              "required": [
                "id",
                "title",
                "count",
                "items"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable section id."
                },
                "title": {
                  "type": "string",
                  "description": "Human-readable section title."
                },
                "summary": {
                  "type": "string",
                  "description": "One-line summary built from the section's highest-ranked diversified items."
                },
                "count": {
                  "type": "integer",
                  "description": "Number of items in this section."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "description": "Normalized headline rows with publisher article URLs."
                },
                "ranking": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Selection policy used for this section."
                }
              },
              "additionalProperties": true
            }
          },
          "topStories": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Highest-ranked cross-section stories."
          },
          "citations": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Flattened citation list when includeCitations is true."
          },
          "limits": {
            "type": "object",
            "additionalProperties": true,
            "description": "Published caps for this bundle route."
          },
          "checkedAt": {
            "type": "string",
            "description": "Server-side ISO timestamp for the briefing."
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "news-morning-briefing",
          "name": "Morning Briefing",
          "department": "Public Data"
        },
        "requested": {
          "focus": "ai markets",
          "topics": [
            "news",
            "business",
            "tech"
          ],
          "hours": 12,
          "maxItemsPerSection": 4,
          "includeCitations": true
        },
        "briefing": {
          "mode": "managed-news-bundle",
          "summary": "Generated 8 briefing items across 4 sections.",
          "sectionCount": 4,
          "itemCount": 8,
          "upstreamDetailsDisclosed": false,
          "resultFreshness": "live",
          "pricing": {
            "model": "x402_per_call",
            "usd": "0.03"
          },
          "ranking": {
            "strategy": "dedupe_relevance_authority_freshness_source_diversity",
            "storyDedupeApplied": true,
            "sourceDiversityApplied": true,
            "maxItemsPerPublisherPerSection": 2,
            "maxTopStoriesPerPublisher": 1
          }
        },
        "sections": [
          {
            "id": "markets",
            "title": "Markets & Business",
            "summary": "Technology stocks rebound",
            "count": 1,
            "items": [
              {
                "title": "Technology stocks rebound",
                "url": "https://publisher.example/news/technology-stocks-rebound",
                "topic": "business",
                "publishedAt": "2026-07-07T12:00:00.000Z"
              }
            ],
            "ranking": {
              "strategy": "relevance_authority_freshness_diversity",
              "sourceDiversityApplied": true,
              "maxItemsPerPublisher": 2
            }
          }
        ],
        "topStories": [
          {
            "title": "AI infrastructure startup announces new agent workflow tools",
            "url": "https://publisher.example/news/ai-agent-workflow-tools",
            "topic": "tech"
          }
        ],
        "citations": [
          {
            "section": "markets",
            "title": "Technology stocks rebound",
            "url": "https://publisher.example/news/technology-stocks-rebound"
          }
        ],
        "limits": {
          "maxLookbackHours": 24,
          "maxSections": 6,
          "maxItemsPerSection": 8,
          "maxItemsPerPublisherPerSection": 2,
          "maxFetchedHeadlines": 250
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "focus": "ai markets",
                "topics": [
                  "news",
                  "business",
                  "tech"
                ],
                "hours": 12,
                "maxItemsPerSection": 4,
                "includeCitations": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "news-morning-briefing",
                  "name": "Morning Briefing",
                  "department": "Public Data"
                },
                "requested": {
                  "focus": "ai markets",
                  "topics": [
                    "news",
                    "business",
                    "tech"
                  ],
                  "hours": 12,
                  "maxItemsPerSection": 4,
                  "includeCitations": true
                },
                "briefing": {
                  "mode": "managed-news-bundle",
                  "summary": "Generated 8 briefing items across 4 sections.",
                  "sectionCount": 4,
                  "itemCount": 8,
                  "upstreamDetailsDisclosed": false,
                  "resultFreshness": "live",
                  "pricing": {
                    "model": "x402_per_call",
                    "usd": "0.03"
                  },
                  "ranking": {
                    "strategy": "dedupe_relevance_authority_freshness_source_diversity",
                    "storyDedupeApplied": true,
                    "sourceDiversityApplied": true,
                    "maxItemsPerPublisherPerSection": 2,
                    "maxTopStoriesPerPublisher": 1
                  }
                },
                "sections": [
                  {
                    "id": "markets",
                    "title": "Markets & Business",
                    "summary": "Technology stocks rebound",
                    "count": 1,
                    "items": [
                      {
                        "title": "Technology stocks rebound",
                        "url": "https://publisher.example/news/technology-stocks-rebound",
                        "topic": "business",
                        "publishedAt": "2026-07-07T12:00:00.000Z"
                      }
                    ],
                    "ranking": {
                      "strategy": "relevance_authority_freshness_diversity",
                      "sourceDiversityApplied": true,
                      "maxItemsPerPublisher": 2
                    }
                  }
                ],
                "topStories": [
                  {
                    "title": "AI infrastructure startup announces new agent workflow tools",
                    "url": "https://publisher.example/news/ai-agent-workflow-tools",
                    "topic": "tech"
                  }
                ],
                "citations": [
                  {
                    "section": "markets",
                    "title": "Technology stocks rebound",
                    "url": "https://publisher.example/news/technology-stocks-rebound"
                  }
                ],
                "limits": {
                  "maxLookbackHours": 24,
                  "maxSections": 6,
                  "maxItemsPerSection": 8,
                  "maxItemsPerPublisherPerSection": 2,
                  "maxFetchedHeadlines": 250
                }
              }
            }
          },
          "routeTemplate": "/api/public-data/news/morning-briefing",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "focus": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name."
                      },
                      "topics": {
                        "type": "array",
                        "maxItems": 6,
                        "items": {
                          "type": "string",
                          "enum": [
                            "all",
                            "tech",
                            "news",
                            "business",
                            "science",
                            "gaming",
                            "culture",
                            "politics",
                            "sports"
                          ],
                          "description": "Topics item filter for Morning Briefing. Accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\". Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"."
                        },
                        "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index."
                      },
                      "hours": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 24,
                        "default": 12,
                        "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24."
                      },
                      "maxItemsPerSection": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 8,
                        "default": 4,
                        "description": "Maximum normalized headline rows returned in each briefing section."
                      },
                      "includeCitations": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set false to omit the flattened citation list while keeping URLs on section items."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "briefing",
                      "sections",
                      "topStories",
                      "limits",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True when the briefing completed."
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "AgentBodega tool metadata."
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Normalized request filters and caps."
                      },
                      "briefing": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "High-level bundle summary, ranking/diversity policy, section count, item count, and source-disclosure policy."
                      },
                      "sections": {
                        "type": "array",
                        "description": "Briefing sections grouped by agent-relevant intent.",
                        "items": {
                          "type": "object",
                          "required": [
                            "id",
                            "title",
                            "count",
                            "items"
                          ],
                          "properties": {
                            "id": {
                              "type": "string",
                              "description": "Stable section id."
                            },
                            "title": {
                              "type": "string",
                              "description": "Human-readable section title."
                            },
                            "summary": {
                              "type": "string",
                              "description": "One-line summary built from the section's highest-ranked diversified items."
                            },
                            "count": {
                              "type": "integer",
                              "description": "Number of items in this section."
                            },
                            "items": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "additionalProperties": true
                              },
                              "description": "Normalized headline rows with publisher article URLs."
                            },
                            "ranking": {
                              "type": "object",
                              "additionalProperties": true,
                              "description": "Selection policy used for this section."
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "topStories": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        },
                        "description": "Highest-ranked cross-section stories."
                      },
                      "citations": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        },
                        "description": "Flattened citation list when includeCitations is true."
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Published caps for this bundle route."
                      },
                      "checkedAt": {
                        "type": "string",
                        "description": "Server-side ISO timestamp for the briefing."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "news-morning-briefing",
            "url": "https://agentbodega.store/api/public-data/news/morning-briefing",
            "method": "POST",
            "description": "Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.",
            "longDescription": "Purpose: Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nBest use: Use this when an agent needs build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: focus, topics, hours, maxItemsPerSection, includeCitations.\n\nAccepted fields:\n- focus (optional, string): Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name. Constraints: max length: 160.\n- topics (optional, array): Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index. Constraints: max items: 6.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 12 hours and is capped at 24. Constraints: default: 12; min: 1; max: 24.\n- maxItemsPerSection (optional, integer): Maximum normalized headline rows returned in each briefing section. Constraints: default: 4; min: 1; max: 8.\n- includeCitations (optional, boolean): Set false to omit the flattened citation list while keeping URLs on section items. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"focus\": \"ai markets\",\n  \"topics\": [\n    \"news\",\n    \"business\",\n    \"tech\"\n  ],\n  \"hours\": 12,\n  \"maxItemsPerSection\": 4,\n  \"includeCitations\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Morning Briefing",
            "category": "public-data",
            "kind": "news-briefing-bundle",
            "tags": [
              "public-data",
              "news",
              "briefing",
              "morning-briefing",
              "markets",
              "ai",
              "crypto",
              "current-events",
              "citations",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "focus",
                "topics",
                "hours",
                "maxItemsPerSection",
                "includeCitations"
              ],
              "fields": [
                {
                  "name": "focus",
                  "type": "string",
                  "required": false,
                  "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "topics",
                  "type": "array",
                  "required": false,
                  "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index.",
                  "constraints": {
                    "maxItems": 6
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "hours",
                  "type": "integer",
                  "required": false,
                  "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24.",
                  "constraints": {
                    "default": 12,
                    "minimum": 1,
                    "maximum": 24
                  }
                },
                {
                  "name": "maxItemsPerSection",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum normalized headline rows returned in each briefing section.",
                  "constraints": {
                    "default": 4,
                    "minimum": 1,
                    "maximum": 8
                  }
                },
                {
                  "name": "includeCitations",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to omit the flattened citation list while keeping URLs on section items.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "focus": "ai markets",
                "topics": [
                  "news",
                  "business",
                  "tech"
                ],
                "hours": 12,
                "maxItemsPerSection": 4,
                "includeCitations": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "focus": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name."
                },
                "topics": {
                  "type": "array",
                  "maxItems": 6,
                  "items": {
                    "type": "string",
                    "enum": [
                      "all",
                      "tech",
                      "news",
                      "business",
                      "science",
                      "gaming",
                      "culture",
                      "politics",
                      "sports"
                    ],
                    "description": "Topics item filter for Morning Briefing. Accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\". Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"."
                  },
                  "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index."
                },
                "hours": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 24,
                  "default": 12,
                  "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24."
                },
                "maxItemsPerSection": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 8,
                  "default": 4,
                  "description": "Maximum normalized headline rows returned in each briefing section."
                },
                "includeCitations": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to omit the flattened citation list while keeping URLs on section items."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "briefing",
                "sections",
                "topStories",
                "limits",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True when the briefing completed."
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "AgentBodega tool metadata."
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Normalized request filters and caps."
                },
                "briefing": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "High-level bundle summary, ranking/diversity policy, section count, item count, and source-disclosure policy."
                },
                "sections": {
                  "type": "array",
                  "description": "Briefing sections grouped by agent-relevant intent.",
                  "items": {
                    "type": "object",
                    "required": [
                      "id",
                      "title",
                      "count",
                      "items"
                    ],
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Stable section id."
                      },
                      "title": {
                        "type": "string",
                        "description": "Human-readable section title."
                      },
                      "summary": {
                        "type": "string",
                        "description": "One-line summary built from the section's highest-ranked diversified items."
                      },
                      "count": {
                        "type": "integer",
                        "description": "Number of items in this section."
                      },
                      "items": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        },
                        "description": "Normalized headline rows with publisher article URLs."
                      },
                      "ranking": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Selection policy used for this section."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "topStories": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "description": "Highest-ranked cross-section stories."
                },
                "citations": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "description": "Flattened citation list when includeCitations is true."
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Published caps for this bundle route."
                },
                "checkedAt": {
                  "type": "string",
                  "description": "Server-side ISO timestamp for the briefing."
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.03"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.03",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/news/morning-briefing",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.03"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/news/morning-briefing",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "news-briefing-bundle",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "news",
          "aisle": "News",
          "shelfId": "briefings",
          "shelf": "Briefings",
          "offeringId": "news-morning-briefing",
          "offering": "Morning Briefing",
          "pathIds": [
            "public-data",
            "news",
            "briefings",
            "news-morning-briefing"
          ],
          "pathLabels": [
            "Public Data",
            "News",
            "Briefings",
            "Morning Briefing"
          ],
          "taxonomyPath": "public-data.news.briefings.news-morning-briefing",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "news",
              "name": "News"
            },
            "shelf": {
              "id": "briefings",
              "name": "Briefings"
            },
            "offering": {
              "id": "news-morning-briefing",
              "name": "Morning Briefing"
            },
            "pathIds": [
              "public-data",
              "news",
              "briefings",
              "news-morning-briefing"
            ],
            "pathLabels": [
              "Public Data",
              "News",
              "Briefings",
              "Morning Briefing"
            ]
          }
        },
        "description": {
          "short": "Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.",
          "full": "Purpose: Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nBest use: Use this when an agent needs build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: focus, topics, hours, maxItemsPerSection, includeCitations.\n\nAccepted fields:\n- focus (optional, string): Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name. Constraints: max length: 160.\n- topics (optional, array): Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index. Constraints: max items: 6.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 12 hours and is capped at 24. Constraints: default: 12; min: 1; max: 24.\n- maxItemsPerSection (optional, integer): Maximum normalized headline rows returned in each briefing section. Constraints: default: 4; min: 1; max: 8.\n- includeCitations (optional, boolean): Set false to omit the flattened citation list while keeping URLs on section items. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"focus\": \"ai markets\",\n  \"topics\": [\n    \"news\",\n    \"business\",\n    \"tech\"\n  ],\n  \"hours\": 12,\n  \"maxItemsPerSection\": 4,\n  \"includeCitations\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "focus": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name."
            },
            "topics": {
              "type": "array",
              "maxItems": 6,
              "items": {
                "type": "string",
                "enum": [
                  "all",
                  "tech",
                  "news",
                  "business",
                  "science",
                  "gaming",
                  "culture",
                  "politics",
                  "sports"
                ],
                "description": "Topics item filter for Morning Briefing. Accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\". Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"."
              },
              "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index."
            },
            "hours": {
              "type": "integer",
              "minimum": 1,
              "maximum": 24,
              "default": 12,
              "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24."
            },
            "maxItemsPerSection": {
              "type": "integer",
              "minimum": 1,
              "maximum": 8,
              "default": 4,
              "description": "Maximum normalized headline rows returned in each briefing section."
            },
            "includeCitations": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit the flattened citation list while keeping URLs on section items."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "focus": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name."
            },
            "topics": {
              "type": "array",
              "maxItems": 6,
              "items": {
                "type": "string",
                "enum": [
                  "all",
                  "tech",
                  "news",
                  "business",
                  "science",
                  "gaming",
                  "culture",
                  "politics",
                  "sports"
                ],
                "description": "Topics item filter for Morning Briefing. Accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\". Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"."
              },
              "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index."
            },
            "hours": {
              "type": "integer",
              "minimum": 1,
              "maximum": 24,
              "default": 12,
              "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24."
            },
            "maxItemsPerSection": {
              "type": "integer",
              "minimum": 1,
              "maximum": 8,
              "default": 4,
              "description": "Maximum normalized headline rows returned in each briefing section."
            },
            "includeCitations": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit the flattened citation list while keeping URLs on section items."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "focus",
            "topics",
            "hours",
            "maxItemsPerSection",
            "includeCitations"
          ],
          "fields": [
            {
              "name": "focus",
              "type": "string",
              "required": false,
              "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "topics",
              "type": "array",
              "required": false,
              "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index.",
              "constraints": {
                "maxItems": 6
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "hours",
              "type": "integer",
              "required": false,
              "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24.",
              "constraints": {
                "default": 12,
                "minimum": 1,
                "maximum": 24
              }
            },
            {
              "name": "maxItemsPerSection",
              "type": "integer",
              "required": false,
              "description": "Maximum normalized headline rows returned in each briefing section.",
              "constraints": {
                "default": 4,
                "minimum": 1,
                "maximum": 8
              }
            },
            {
              "name": "includeCitations",
              "type": "boolean",
              "required": false,
              "description": "Set false to omit the flattened citation list while keeping URLs on section items.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "focus": "ai markets",
            "topics": [
              "news",
              "business",
              "tech"
            ],
            "hours": 12,
            "maxItemsPerSection": 4,
            "includeCitations": true
          }
        },
        "exampleRequest": {
          "focus": "ai markets",
          "topics": [
            "news",
            "business",
            "tech"
          ],
          "hours": 12,
          "maxItemsPerSection": 4,
          "includeCitations": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "briefing",
            "sections",
            "topStories",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the briefing completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "briefing": {
              "type": "object",
              "additionalProperties": true,
              "description": "High-level bundle summary, ranking/diversity policy, section count, item count, and source-disclosure policy."
            },
            "sections": {
              "type": "array",
              "description": "Briefing sections grouped by agent-relevant intent.",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "title",
                  "count",
                  "items"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable section id."
                  },
                  "title": {
                    "type": "string",
                    "description": "Human-readable section title."
                  },
                  "summary": {
                    "type": "string",
                    "description": "One-line summary built from the section's highest-ranked diversified items."
                  },
                  "count": {
                    "type": "integer",
                    "description": "Number of items in this section."
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Normalized headline rows with publisher article URLs."
                  },
                  "ranking": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Selection policy used for this section."
                  }
                },
                "additionalProperties": true
              }
            },
            "topStories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              },
              "description": "Highest-ranked cross-section stories."
            },
            "citations": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              },
              "description": "Flattened citation list when includeCitations is true."
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this bundle route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for the briefing."
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "briefing",
            "sections",
            "topStories",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the briefing completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "briefing": {
              "type": "object",
              "additionalProperties": true,
              "description": "High-level bundle summary, ranking/diversity policy, section count, item count, and source-disclosure policy."
            },
            "sections": {
              "type": "array",
              "description": "Briefing sections grouped by agent-relevant intent.",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "title",
                  "count",
                  "items"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable section id."
                  },
                  "title": {
                    "type": "string",
                    "description": "Human-readable section title."
                  },
                  "summary": {
                    "type": "string",
                    "description": "One-line summary built from the section's highest-ranked diversified items."
                  },
                  "count": {
                    "type": "integer",
                    "description": "Number of items in this section."
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Normalized headline rows with publisher article URLs."
                  },
                  "ranking": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Selection policy used for this section."
                  }
                },
                "additionalProperties": true
              }
            },
            "topStories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              },
              "description": "Highest-ranked cross-section stories."
            },
            "citations": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              },
              "description": "Flattened citation list when includeCitations is true."
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this bundle route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for the briefing."
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "news-morning-briefing",
            "name": "Morning Briefing",
            "department": "Public Data"
          },
          "requested": {
            "focus": "ai markets",
            "topics": [
              "news",
              "business",
              "tech"
            ],
            "hours": 12,
            "maxItemsPerSection": 4,
            "includeCitations": true
          },
          "briefing": {
            "mode": "managed-news-bundle",
            "summary": "Generated 8 briefing items across 4 sections.",
            "sectionCount": 4,
            "itemCount": 8,
            "upstreamDetailsDisclosed": false,
            "resultFreshness": "live",
            "pricing": {
              "model": "x402_per_call",
              "usd": "0.03"
            },
            "ranking": {
              "strategy": "dedupe_relevance_authority_freshness_source_diversity",
              "storyDedupeApplied": true,
              "sourceDiversityApplied": true,
              "maxItemsPerPublisherPerSection": 2,
              "maxTopStoriesPerPublisher": 1
            }
          },
          "sections": [
            {
              "id": "markets",
              "title": "Markets & Business",
              "summary": "Technology stocks rebound",
              "count": 1,
              "items": [
                {
                  "title": "Technology stocks rebound",
                  "url": "https://publisher.example/news/technology-stocks-rebound",
                  "topic": "business",
                  "publishedAt": "2026-07-07T12:00:00.000Z"
                }
              ],
              "ranking": {
                "strategy": "relevance_authority_freshness_diversity",
                "sourceDiversityApplied": true,
                "maxItemsPerPublisher": 2
              }
            }
          ],
          "topStories": [
            {
              "title": "AI infrastructure startup announces new agent workflow tools",
              "url": "https://publisher.example/news/ai-agent-workflow-tools",
              "topic": "tech"
            }
          ],
          "citations": [
            {
              "section": "markets",
              "title": "Technology stocks rebound",
              "url": "https://publisher.example/news/technology-stocks-rebound"
            }
          ],
          "limits": {
            "maxLookbackHours": 24,
            "maxSections": 6,
            "maxItemsPerSection": 8,
            "maxItemsPerPublisherPerSection": 2,
            "maxFetchedHeadlines": 250
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/classified-listing-search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Classified Listing Search",
      "description": "Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.",
      "longDescription": "Purpose: Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nBest use: Use this when an agent needs search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: city, category, query.\nOptional fields: sort, postal, search_distance, min_price, max_price, min_bedrooms, max_bedrooms, hasPic, bundleDuplicates, limit, proxiesSx.\n\nAccepted fields:\n- city (required, string): Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston.\n- category (required, string): Listing category abbreviation, such as sss, cta, apa, jjj, or zip.\n- query (required, string): Search text.\n- sort (optional, string): Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".\n- postal (optional, string): Optional postal code to force geo-scoping when the caller's IP region differs from the target city.\n- search_distance (optional, integer): Optional radius in miles when postal is supplied. Constraints: min: 1; max: 500.\n- min_price (optional, integer): Min price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_price (optional, integer): Max price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- min_bedrooms (optional, integer): Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_bedrooms (optional, integer): Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- hasPic (optional, boolean): Set true to enable has pic behavior for Classified Listing Search.\n- bundleDuplicates (optional, boolean): Set true to enable bundle duplicates behavior for Classified Listing Search.\n- limit (optional, integer): Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"sfbay\",\n  \"category\": \"sss\",\n  \"query\": \"bicycle\",\n  \"sort\": \"date\",\n  \"postal\": \"94103\",\n  \"search_distance\": 25,\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "marketplace-listings",
      "aisle": "Marketplace Listings",
      "shelfId": "marketplace-listings",
      "shelf": "Marketplace Listings",
      "offeringId": "classified-listing-search",
      "offering": "Classified Listing Search",
      "pathIds": [
        "public-data",
        "marketplace-listings",
        "marketplace-listings",
        "classified-listing-search"
      ],
      "pathLabels": [
        "Public Data",
        "Marketplace Listings",
        "Marketplace Listings",
        "Classified Listing Search"
      ],
      "taxonomyPath": "public-data.marketplace-listings.marketplace-listings.classified-listing-search",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "marketplace-listings",
          "name": "Marketplace Listings"
        },
        "shelf": {
          "id": "marketplace-listings",
          "name": "Marketplace Listings"
        },
        "offering": {
          "id": "classified-listing-search",
          "name": "Classified Listing Search"
        },
        "pathIds": [
          "public-data",
          "marketplace-listings",
          "marketplace-listings",
          "classified-listing-search"
        ],
        "pathLabels": [
          "Public Data",
          "Marketplace Listings",
          "Marketplace Listings",
          "Classified Listing Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "classifieds",
        "marketplace-listings",
        "local-search",
        "public-data",
        "search"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "city",
          "category",
          "query"
        ],
        "properties": {
          "city": {
            "type": "string",
            "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
          },
          "category": {
            "type": "string",
            "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
          },
          "query": {
            "type": "string",
            "description": "Search text."
          },
          "sort": {
            "type": "string",
            "enum": [
              "date",
              "rel",
              "priceasc",
              "pricedsc"
            ],
            "default": "date",
            "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\"."
          },
          "postal": {
            "type": "string",
            "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
          },
          "search_distance": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500,
            "description": "Optional radius in miles when postal is supplied."
          },
          "min_price": {
            "type": "integer",
            "minimum": 0,
            "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0."
          },
          "max_price": {
            "type": "integer",
            "minimum": 0,
            "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0."
          },
          "min_bedrooms": {
            "type": "integer",
            "minimum": 0,
            "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
          },
          "max_bedrooms": {
            "type": "integer",
            "minimum": 0,
            "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
          },
          "hasPic": {
            "type": "boolean",
            "description": "Set true to enable has pic behavior for Classified Listing Search."
          },
          "bundleDuplicates": {
            "type": "boolean",
            "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 25,
            "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "city",
          "category",
          "query"
        ],
        "optional": [
          "sort",
          "postal",
          "search_distance",
          "min_price",
          "max_price",
          "min_bedrooms",
          "max_bedrooms",
          "hasPic",
          "bundleDuplicates",
          "limit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "city",
            "type": "string",
            "required": true,
            "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
          },
          {
            "name": "category",
            "type": "string",
            "required": true,
            "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
          },
          {
            "name": "query",
            "type": "string",
            "required": true,
            "description": "Search text."
          },
          {
            "name": "sort",
            "type": "string",
            "required": false,
            "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".",
            "constraints": {
              "enum": [
                "date",
                "rel",
                "priceasc",
                "pricedsc"
              ],
              "default": "date"
            }
          },
          {
            "name": "postal",
            "type": "string",
            "required": false,
            "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
          },
          {
            "name": "search_distance",
            "type": "integer",
            "required": false,
            "description": "Optional radius in miles when postal is supplied.",
            "constraints": {
              "minimum": 1,
              "maximum": 500
            }
          },
          {
            "name": "min_price",
            "type": "integer",
            "required": false,
            "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "max_price",
            "type": "integer",
            "required": false,
            "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "min_bedrooms",
            "type": "integer",
            "required": false,
            "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "max_bedrooms",
            "type": "integer",
            "required": false,
            "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "hasPic",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable has pic behavior for Classified Listing Search."
          },
          {
            "name": "bundleDuplicates",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100.",
            "constraints": {
              "default": 25,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "city": "sfbay",
          "category": "sss",
          "query": "bicycle",
          "sort": "date",
          "postal": "94103",
          "search_distance": 25,
          "limit": 10
        }
      },
      "exampleRequest": {
        "city": "sfbay",
        "category": "sss",
        "query": "bicycle",
        "sort": "date",
        "postal": "94103",
        "search_distance": 25,
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "classified-listing-search",
          "name": "Classified Listing Search",
          "department": "Public Data"
        },
        "total_results": 5635,
        "results": [
          {
            "posting_id": 7927446618,
            "title": "Kryptonite bike chain",
            "price": "$100",
            "location": "san leandro",
            "subarea": "eby"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "city": "sfbay",
                "category": "sss",
                "query": "bicycle",
                "sort": "date",
                "postal": "94103",
                "search_distance": 25,
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "classified-listing-search",
                  "name": "Classified Listing Search",
                  "department": "Public Data"
                },
                "total_results": 5635,
                "results": [
                  {
                    "posting_id": 7927446618,
                    "title": "Kryptonite bike chain",
                    "price": "$100",
                    "location": "san leandro",
                    "subarea": "eby"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/classified-listing-search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "city",
                      "category",
                      "query"
                    ],
                    "properties": {
                      "city": {
                        "type": "string",
                        "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
                      },
                      "category": {
                        "type": "string",
                        "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
                      },
                      "query": {
                        "type": "string",
                        "description": "Search text."
                      },
                      "sort": {
                        "type": "string",
                        "enum": [
                          "date",
                          "rel",
                          "priceasc",
                          "pricedsc"
                        ],
                        "default": "date",
                        "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\"."
                      },
                      "postal": {
                        "type": "string",
                        "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
                      },
                      "search_distance": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 500,
                        "description": "Optional radius in miles when postal is supplied."
                      },
                      "min_price": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0."
                      },
                      "max_price": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0."
                      },
                      "min_bedrooms": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
                      },
                      "max_bedrooms": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
                      },
                      "hasPic": {
                        "type": "boolean",
                        "description": "Set true to enable has pic behavior for Classified Listing Search."
                      },
                      "bundleDuplicates": {
                        "type": "boolean",
                        "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100,
                        "default": 25,
                        "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "classified-listing-search",
            "url": "https://agentbodega.store/api/public-data/classified-listing-search",
            "method": "POST",
            "description": "Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.",
            "longDescription": "Purpose: Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nBest use: Use this when an agent needs search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: city, category, query.\nOptional fields: sort, postal, search_distance, min_price, max_price, min_bedrooms, max_bedrooms, hasPic, bundleDuplicates, limit, proxiesSx.\n\nAccepted fields:\n- city (required, string): Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston.\n- category (required, string): Listing category abbreviation, such as sss, cta, apa, jjj, or zip.\n- query (required, string): Search text.\n- sort (optional, string): Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".\n- postal (optional, string): Optional postal code to force geo-scoping when the caller's IP region differs from the target city.\n- search_distance (optional, integer): Optional radius in miles when postal is supplied. Constraints: min: 1; max: 500.\n- min_price (optional, integer): Min price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_price (optional, integer): Max price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- min_bedrooms (optional, integer): Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_bedrooms (optional, integer): Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- hasPic (optional, boolean): Set true to enable has pic behavior for Classified Listing Search.\n- bundleDuplicates (optional, boolean): Set true to enable bundle duplicates behavior for Classified Listing Search.\n- limit (optional, integer): Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"sfbay\",\n  \"category\": \"sss\",\n  \"query\": \"bicycle\",\n  \"sort\": \"date\",\n  \"postal\": \"94103\",\n  \"search_distance\": 25,\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Classified Listing Search",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "classifieds",
              "marketplace-listings",
              "local-search",
              "public-data",
              "search"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "city",
                "category",
                "query"
              ],
              "optional": [
                "sort",
                "postal",
                "search_distance",
                "min_price",
                "max_price",
                "min_bedrooms",
                "max_bedrooms",
                "hasPic",
                "bundleDuplicates",
                "limit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "city",
                  "type": "string",
                  "required": true,
                  "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
                },
                {
                  "name": "category",
                  "type": "string",
                  "required": true,
                  "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
                },
                {
                  "name": "query",
                  "type": "string",
                  "required": true,
                  "description": "Search text."
                },
                {
                  "name": "sort",
                  "type": "string",
                  "required": false,
                  "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".",
                  "constraints": {
                    "enum": [
                      "date",
                      "rel",
                      "priceasc",
                      "pricedsc"
                    ],
                    "default": "date"
                  }
                },
                {
                  "name": "postal",
                  "type": "string",
                  "required": false,
                  "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
                },
                {
                  "name": "search_distance",
                  "type": "integer",
                  "required": false,
                  "description": "Optional radius in miles when postal is supplied.",
                  "constraints": {
                    "minimum": 1,
                    "maximum": 500
                  }
                },
                {
                  "name": "min_price",
                  "type": "integer",
                  "required": false,
                  "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "max_price",
                  "type": "integer",
                  "required": false,
                  "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "min_bedrooms",
                  "type": "integer",
                  "required": false,
                  "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "max_bedrooms",
                  "type": "integer",
                  "required": false,
                  "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "hasPic",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable has pic behavior for Classified Listing Search."
                },
                {
                  "name": "bundleDuplicates",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100.",
                  "constraints": {
                    "default": 25,
                    "minimum": 1,
                    "maximum": 100
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "city": "sfbay",
                "category": "sss",
                "query": "bicycle",
                "sort": "date",
                "postal": "94103",
                "search_distance": 25,
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "city",
                "category",
                "query"
              ],
              "properties": {
                "city": {
                  "type": "string",
                  "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
                },
                "category": {
                  "type": "string",
                  "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
                },
                "query": {
                  "type": "string",
                  "description": "Search text."
                },
                "sort": {
                  "type": "string",
                  "enum": [
                    "date",
                    "rel",
                    "priceasc",
                    "pricedsc"
                  ],
                  "default": "date",
                  "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\"."
                },
                "postal": {
                  "type": "string",
                  "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
                },
                "search_distance": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 500,
                  "description": "Optional radius in miles when postal is supplied."
                },
                "min_price": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0."
                },
                "max_price": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0."
                },
                "min_bedrooms": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
                },
                "max_bedrooms": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
                },
                "hasPic": {
                  "type": "boolean",
                  "description": "Set true to enable has pic behavior for Classified Listing Search."
                },
                "bundleDuplicates": {
                  "type": "boolean",
                  "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100,
                  "default": 25,
                  "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/classified-listing-search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/classified-listing-search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "marketplace-listings",
          "aisle": "Marketplace Listings",
          "shelfId": "marketplace-listings",
          "shelf": "Marketplace Listings",
          "offeringId": "classified-listing-search",
          "offering": "Classified Listing Search",
          "pathIds": [
            "public-data",
            "marketplace-listings",
            "marketplace-listings",
            "classified-listing-search"
          ],
          "pathLabels": [
            "Public Data",
            "Marketplace Listings",
            "Marketplace Listings",
            "Classified Listing Search"
          ],
          "taxonomyPath": "public-data.marketplace-listings.marketplace-listings.classified-listing-search",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "marketplace-listings",
              "name": "Marketplace Listings"
            },
            "shelf": {
              "id": "marketplace-listings",
              "name": "Marketplace Listings"
            },
            "offering": {
              "id": "classified-listing-search",
              "name": "Classified Listing Search"
            },
            "pathIds": [
              "public-data",
              "marketplace-listings",
              "marketplace-listings",
              "classified-listing-search"
            ],
            "pathLabels": [
              "Public Data",
              "Marketplace Listings",
              "Marketplace Listings",
              "Classified Listing Search"
            ]
          }
        },
        "description": {
          "short": "Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.",
          "full": "Purpose: Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nBest use: Use this when an agent needs search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: city, category, query.\nOptional fields: sort, postal, search_distance, min_price, max_price, min_bedrooms, max_bedrooms, hasPic, bundleDuplicates, limit, proxiesSx.\n\nAccepted fields:\n- city (required, string): Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston.\n- category (required, string): Listing category abbreviation, such as sss, cta, apa, jjj, or zip.\n- query (required, string): Search text.\n- sort (optional, string): Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".\n- postal (optional, string): Optional postal code to force geo-scoping when the caller's IP region differs from the target city.\n- search_distance (optional, integer): Optional radius in miles when postal is supplied. Constraints: min: 1; max: 500.\n- min_price (optional, integer): Min price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_price (optional, integer): Max price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- min_bedrooms (optional, integer): Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_bedrooms (optional, integer): Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- hasPic (optional, boolean): Set true to enable has pic behavior for Classified Listing Search.\n- bundleDuplicates (optional, boolean): Set true to enable bundle duplicates behavior for Classified Listing Search.\n- limit (optional, integer): Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"sfbay\",\n  \"category\": \"sss\",\n  \"query\": \"bicycle\",\n  \"sort\": \"date\",\n  \"postal\": \"94103\",\n  \"search_distance\": 25,\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "city",
            "category",
            "query"
          ],
          "properties": {
            "city": {
              "type": "string",
              "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
            },
            "category": {
              "type": "string",
              "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
            },
            "query": {
              "type": "string",
              "description": "Search text."
            },
            "sort": {
              "type": "string",
              "enum": [
                "date",
                "rel",
                "priceasc",
                "pricedsc"
              ],
              "default": "date",
              "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\"."
            },
            "postal": {
              "type": "string",
              "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
            },
            "search_distance": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "description": "Optional radius in miles when postal is supplied."
            },
            "min_price": {
              "type": "integer",
              "minimum": 0,
              "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "max_price": {
              "type": "integer",
              "minimum": 0,
              "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "min_bedrooms": {
              "type": "integer",
              "minimum": 0,
              "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "max_bedrooms": {
              "type": "integer",
              "minimum": 0,
              "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "hasPic": {
              "type": "boolean",
              "description": "Set true to enable has pic behavior for Classified Listing Search."
            },
            "bundleDuplicates": {
              "type": "boolean",
              "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "city",
            "category",
            "query"
          ],
          "properties": {
            "city": {
              "type": "string",
              "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
            },
            "category": {
              "type": "string",
              "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
            },
            "query": {
              "type": "string",
              "description": "Search text."
            },
            "sort": {
              "type": "string",
              "enum": [
                "date",
                "rel",
                "priceasc",
                "pricedsc"
              ],
              "default": "date",
              "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\"."
            },
            "postal": {
              "type": "string",
              "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
            },
            "search_distance": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "description": "Optional radius in miles when postal is supplied."
            },
            "min_price": {
              "type": "integer",
              "minimum": 0,
              "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "max_price": {
              "type": "integer",
              "minimum": 0,
              "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "min_bedrooms": {
              "type": "integer",
              "minimum": 0,
              "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "max_bedrooms": {
              "type": "integer",
              "minimum": 0,
              "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "hasPic": {
              "type": "boolean",
              "description": "Set true to enable has pic behavior for Classified Listing Search."
            },
            "bundleDuplicates": {
              "type": "boolean",
              "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "city",
            "category",
            "query"
          ],
          "optional": [
            "sort",
            "postal",
            "search_distance",
            "min_price",
            "max_price",
            "min_bedrooms",
            "max_bedrooms",
            "hasPic",
            "bundleDuplicates",
            "limit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "city",
              "type": "string",
              "required": true,
              "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
            },
            {
              "name": "category",
              "type": "string",
              "required": true,
              "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
            },
            {
              "name": "query",
              "type": "string",
              "required": true,
              "description": "Search text."
            },
            {
              "name": "sort",
              "type": "string",
              "required": false,
              "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".",
              "constraints": {
                "enum": [
                  "date",
                  "rel",
                  "priceasc",
                  "pricedsc"
                ],
                "default": "date"
              }
            },
            {
              "name": "postal",
              "type": "string",
              "required": false,
              "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
            },
            {
              "name": "search_distance",
              "type": "integer",
              "required": false,
              "description": "Optional radius in miles when postal is supplied.",
              "constraints": {
                "minimum": 1,
                "maximum": 500
              }
            },
            {
              "name": "min_price",
              "type": "integer",
              "required": false,
              "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "max_price",
              "type": "integer",
              "required": false,
              "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "min_bedrooms",
              "type": "integer",
              "required": false,
              "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "max_bedrooms",
              "type": "integer",
              "required": false,
              "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "hasPic",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable has pic behavior for Classified Listing Search."
            },
            {
              "name": "bundleDuplicates",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100.",
              "constraints": {
                "default": 25,
                "minimum": 1,
                "maximum": 100
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "city": "sfbay",
            "category": "sss",
            "query": "bicycle",
            "sort": "date",
            "postal": "94103",
            "search_distance": 25,
            "limit": 10
          }
        },
        "exampleRequest": {
          "city": "sfbay",
          "category": "sss",
          "query": "bicycle",
          "sort": "date",
          "postal": "94103",
          "search_distance": 25,
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "classified-listing-search",
            "name": "Classified Listing Search",
            "department": "Public Data"
          },
          "total_results": 5635,
          "results": [
            {
              "posting_id": 7927446618,
              "title": "Kryptonite bike chain",
              "price": "$100",
              "location": "san leandro",
              "subarea": "eby"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/california-highway-traffic",
      "type": "http",
      "x402Version": 2,
      "serviceName": "California Highway Traffic Speeds",
      "description": "Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.",
      "longDescription": "Purpose: Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nBest use: Use this when an agent needs return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: region, road, direction, minMph, includeIncidents, includeSensors, limit, proxiesSx.\n\nAccepted fields:\n- region (optional, string): California traffic region. Constraints: accepted values: \"NoCal\", \"SoCal\", \"CenCal\"; default: \"NoCal\".\n- road (optional, string): Optional road/highway filter, such as 101, 580, I-80, or CA-1.\n- direction (optional, string): Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".\n- minMph (optional, integer): Only return sections whose average speed is at or below this MPH. Constraints: min: 0.\n- includeIncidents (optional, boolean): Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true. Constraints: default: true.\n- includeSensors (optional, boolean): Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false. Constraints: default: false.\n- limit (optional, integer): Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200. Constraints: default: 100; min: 1; max: 200.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"region\": \"NoCal\",\n  \"road\": \"580\",\n  \"includeIncidents\": true,\n  \"limit\": 20\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "transportation",
      "aisle": "Transportation",
      "shelfId": "transportation",
      "shelf": "Transportation",
      "offeringId": "california-highway-traffic",
      "offering": "California Highway Traffic Speeds",
      "pathIds": [
        "public-data",
        "transportation",
        "transportation",
        "california-highway-traffic"
      ],
      "pathLabels": [
        "Public Data",
        "Transportation",
        "Transportation",
        "California Highway Traffic Speeds"
      ],
      "taxonomyPath": "public-data.transportation.transportation.california-highway-traffic",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "transportation",
          "name": "Transportation"
        },
        "shelf": {
          "id": "transportation",
          "name": "Transportation"
        },
        "offering": {
          "id": "california-highway-traffic",
          "name": "California Highway Traffic Speeds"
        },
        "pathIds": [
          "public-data",
          "transportation",
          "transportation",
          "california-highway-traffic"
        ],
        "pathLabels": [
          "Public Data",
          "Transportation",
          "Transportation",
          "California Highway Traffic Speeds"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "traffic",
        "california",
        "highways",
        "public-data",
        "transportation"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "region": {
            "type": "string",
            "enum": [
              "NoCal",
              "SoCal",
              "CenCal"
            ],
            "default": "NoCal",
            "description": "California traffic region."
          },
          "road": {
            "type": "string",
            "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
          },
          "direction": {
            "type": "string",
            "enum": [
              "North",
              "South",
              "East",
              "West"
            ],
            "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\"."
          },
          "minMph": {
            "type": "integer",
            "minimum": 0,
            "description": "Only return sections whose average speed is at or below this MPH."
          },
          "includeIncidents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true."
          },
          "includeSensors": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "default": 100,
            "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "region",
          "road",
          "direction",
          "minMph",
          "includeIncidents",
          "includeSensors",
          "limit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "region",
            "type": "string",
            "required": false,
            "description": "California traffic region.",
            "constraints": {
              "enum": [
                "NoCal",
                "SoCal",
                "CenCal"
              ],
              "default": "NoCal"
            }
          },
          {
            "name": "road",
            "type": "string",
            "required": false,
            "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
          },
          {
            "name": "direction",
            "type": "string",
            "required": false,
            "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".",
            "constraints": {
              "enum": [
                "North",
                "South",
                "East",
                "West"
              ]
            }
          },
          {
            "name": "minMph",
            "type": "integer",
            "required": false,
            "description": "Only return sections whose average speed is at or below this MPH.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "includeIncidents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeSensors",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200.",
            "constraints": {
              "default": 100,
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "region": "NoCal",
          "road": "580",
          "includeIncidents": true,
          "limit": 20
        }
      },
      "exampleRequest": {
        "region": "NoCal",
        "road": "580",
        "includeIncidents": true,
        "limit": 20
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "california-highway-traffic",
          "name": "California Highway Traffic Speeds",
          "department": "Public Data"
        },
        "region": "NoCal",
        "results": [
          {
            "road_id": "100580",
            "road": "580",
            "direction": "East",
            "avg_mph": 34.2,
            "min_mph": 12,
            "max_mph": 61,
            "sensors": 18
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "region": "NoCal",
                "road": "580",
                "includeIncidents": true,
                "limit": 20
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "california-highway-traffic",
                  "name": "California Highway Traffic Speeds",
                  "department": "Public Data"
                },
                "region": "NoCal",
                "results": [
                  {
                    "road_id": "100580",
                    "road": "580",
                    "direction": "East",
                    "avg_mph": 34.2,
                    "min_mph": 12,
                    "max_mph": 61,
                    "sensors": 18
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/california-highway-traffic",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "region": {
                        "type": "string",
                        "enum": [
                          "NoCal",
                          "SoCal",
                          "CenCal"
                        ],
                        "default": "NoCal",
                        "description": "California traffic region."
                      },
                      "road": {
                        "type": "string",
                        "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
                      },
                      "direction": {
                        "type": "string",
                        "enum": [
                          "North",
                          "South",
                          "East",
                          "West"
                        ],
                        "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\"."
                      },
                      "minMph": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Only return sections whose average speed is at or below this MPH."
                      },
                      "includeIncidents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true."
                      },
                      "includeSensors": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 200,
                        "default": 100,
                        "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "california-highway-traffic",
            "url": "https://agentbodega.store/api/public-data/california-highway-traffic",
            "method": "POST",
            "description": "Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.",
            "longDescription": "Purpose: Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nBest use: Use this when an agent needs return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: region, road, direction, minMph, includeIncidents, includeSensors, limit, proxiesSx.\n\nAccepted fields:\n- region (optional, string): California traffic region. Constraints: accepted values: \"NoCal\", \"SoCal\", \"CenCal\"; default: \"NoCal\".\n- road (optional, string): Optional road/highway filter, such as 101, 580, I-80, or CA-1.\n- direction (optional, string): Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".\n- minMph (optional, integer): Only return sections whose average speed is at or below this MPH. Constraints: min: 0.\n- includeIncidents (optional, boolean): Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true. Constraints: default: true.\n- includeSensors (optional, boolean): Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false. Constraints: default: false.\n- limit (optional, integer): Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200. Constraints: default: 100; min: 1; max: 200.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"region\": \"NoCal\",\n  \"road\": \"580\",\n  \"includeIncidents\": true,\n  \"limit\": 20\n}\n```",
            "mimeType": "application/json",
            "serviceName": "California Highway Traffic Speeds",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "traffic",
              "california",
              "highways",
              "public-data",
              "transportation"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "region",
                "road",
                "direction",
                "minMph",
                "includeIncidents",
                "includeSensors",
                "limit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "region",
                  "type": "string",
                  "required": false,
                  "description": "California traffic region.",
                  "constraints": {
                    "enum": [
                      "NoCal",
                      "SoCal",
                      "CenCal"
                    ],
                    "default": "NoCal"
                  }
                },
                {
                  "name": "road",
                  "type": "string",
                  "required": false,
                  "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
                },
                {
                  "name": "direction",
                  "type": "string",
                  "required": false,
                  "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".",
                  "constraints": {
                    "enum": [
                      "North",
                      "South",
                      "East",
                      "West"
                    ]
                  }
                },
                {
                  "name": "minMph",
                  "type": "integer",
                  "required": false,
                  "description": "Only return sections whose average speed is at or below this MPH.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "includeIncidents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeSensors",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200.",
                  "constraints": {
                    "default": 100,
                    "minimum": 1,
                    "maximum": 200
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "region": "NoCal",
                "road": "580",
                "includeIncidents": true,
                "limit": 20
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "region": {
                  "type": "string",
                  "enum": [
                    "NoCal",
                    "SoCal",
                    "CenCal"
                  ],
                  "default": "NoCal",
                  "description": "California traffic region."
                },
                "road": {
                  "type": "string",
                  "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
                },
                "direction": {
                  "type": "string",
                  "enum": [
                    "North",
                    "South",
                    "East",
                    "West"
                  ],
                  "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\"."
                },
                "minMph": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Only return sections whose average speed is at or below this MPH."
                },
                "includeIncidents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true."
                },
                "includeSensors": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 200,
                  "default": 100,
                  "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/california-highway-traffic",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/california-highway-traffic",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "transportation",
          "aisle": "Transportation",
          "shelfId": "transportation",
          "shelf": "Transportation",
          "offeringId": "california-highway-traffic",
          "offering": "California Highway Traffic Speeds",
          "pathIds": [
            "public-data",
            "transportation",
            "transportation",
            "california-highway-traffic"
          ],
          "pathLabels": [
            "Public Data",
            "Transportation",
            "Transportation",
            "California Highway Traffic Speeds"
          ],
          "taxonomyPath": "public-data.transportation.transportation.california-highway-traffic",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "transportation",
              "name": "Transportation"
            },
            "shelf": {
              "id": "transportation",
              "name": "Transportation"
            },
            "offering": {
              "id": "california-highway-traffic",
              "name": "California Highway Traffic Speeds"
            },
            "pathIds": [
              "public-data",
              "transportation",
              "transportation",
              "california-highway-traffic"
            ],
            "pathLabels": [
              "Public Data",
              "Transportation",
              "Transportation",
              "California Highway Traffic Speeds"
            ]
          }
        },
        "description": {
          "short": "Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.",
          "full": "Purpose: Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nBest use: Use this when an agent needs return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: region, road, direction, minMph, includeIncidents, includeSensors, limit, proxiesSx.\n\nAccepted fields:\n- region (optional, string): California traffic region. Constraints: accepted values: \"NoCal\", \"SoCal\", \"CenCal\"; default: \"NoCal\".\n- road (optional, string): Optional road/highway filter, such as 101, 580, I-80, or CA-1.\n- direction (optional, string): Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".\n- minMph (optional, integer): Only return sections whose average speed is at or below this MPH. Constraints: min: 0.\n- includeIncidents (optional, boolean): Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true. Constraints: default: true.\n- includeSensors (optional, boolean): Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false. Constraints: default: false.\n- limit (optional, integer): Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200. Constraints: default: 100; min: 1; max: 200.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"region\": \"NoCal\",\n  \"road\": \"580\",\n  \"includeIncidents\": true,\n  \"limit\": 20\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "region": {
              "type": "string",
              "enum": [
                "NoCal",
                "SoCal",
                "CenCal"
              ],
              "default": "NoCal",
              "description": "California traffic region."
            },
            "road": {
              "type": "string",
              "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
            },
            "direction": {
              "type": "string",
              "enum": [
                "North",
                "South",
                "East",
                "West"
              ],
              "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\"."
            },
            "minMph": {
              "type": "integer",
              "minimum": 0,
              "description": "Only return sections whose average speed is at or below this MPH."
            },
            "includeIncidents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true."
            },
            "includeSensors": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 100,
              "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "region": {
              "type": "string",
              "enum": [
                "NoCal",
                "SoCal",
                "CenCal"
              ],
              "default": "NoCal",
              "description": "California traffic region."
            },
            "road": {
              "type": "string",
              "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
            },
            "direction": {
              "type": "string",
              "enum": [
                "North",
                "South",
                "East",
                "West"
              ],
              "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\"."
            },
            "minMph": {
              "type": "integer",
              "minimum": 0,
              "description": "Only return sections whose average speed is at or below this MPH."
            },
            "includeIncidents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true."
            },
            "includeSensors": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 100,
              "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "region",
            "road",
            "direction",
            "minMph",
            "includeIncidents",
            "includeSensors",
            "limit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "region",
              "type": "string",
              "required": false,
              "description": "California traffic region.",
              "constraints": {
                "enum": [
                  "NoCal",
                  "SoCal",
                  "CenCal"
                ],
                "default": "NoCal"
              }
            },
            {
              "name": "road",
              "type": "string",
              "required": false,
              "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
            },
            {
              "name": "direction",
              "type": "string",
              "required": false,
              "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".",
              "constraints": {
                "enum": [
                  "North",
                  "South",
                  "East",
                  "West"
                ]
              }
            },
            {
              "name": "minMph",
              "type": "integer",
              "required": false,
              "description": "Only return sections whose average speed is at or below this MPH.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "includeIncidents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeSensors",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200.",
              "constraints": {
                "default": 100,
                "minimum": 1,
                "maximum": 200
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "region": "NoCal",
            "road": "580",
            "includeIncidents": true,
            "limit": 20
          }
        },
        "exampleRequest": {
          "region": "NoCal",
          "road": "580",
          "includeIncidents": true,
          "limit": 20
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "california-highway-traffic",
            "name": "California Highway Traffic Speeds",
            "department": "Public Data"
          },
          "region": "NoCal",
          "results": [
            {
              "road_id": "100580",
              "road": "580",
              "direction": "East",
              "avg_mph": 34.2,
              "min_mph": 12,
              "max_mph": 61,
              "sensors": 18
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/rental-listing-search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Rental Listing Search",
      "description": "Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.",
      "longDescription": "Purpose: Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nBest use: Use this when an agent needs find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resourceId.\nOptional fields: searchSlug, maxPrice, minPrice, bedrooms, bathrooms, orderBy, limit, proxiesSx.\n\nAccepted fields:\n- resourceId (required, string): Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca.\n- searchSlug (optional, string): Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent. Constraints: default: \"apartments-for-rent\".\n- maxPrice (optional, integer): Max Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- minPrice (optional, integer): Min Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- bedrooms (optional, string): Comma-separated bedroom filter, such as 1,2,3.\n- bathrooms (optional, string): Comma-separated bathroom filter, such as 1,1.5,2.\n- orderBy (optional, string): Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".\n- limit (optional, integer): Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resourceId\": \"san-francisco-ca\",\n  \"searchSlug\": \"apartments-for-rent\",\n  \"maxPrice\": 4000,\n  \"bedrooms\": \"1,2\",\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "real-estate-rentals",
      "aisle": "Real Estate Rentals",
      "shelfId": "real-estate-rentals",
      "shelf": "Real Estate Rentals",
      "offeringId": "rental-listing-search",
      "offering": "Rental Listing Search",
      "pathIds": [
        "public-data",
        "real-estate-rentals",
        "real-estate-rentals",
        "rental-listing-search"
      ],
      "pathLabels": [
        "Public Data",
        "Real Estate Rentals",
        "Real Estate Rentals",
        "Rental Listing Search"
      ],
      "taxonomyPath": "public-data.real-estate-rentals.real-estate-rentals.rental-listing-search",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "real-estate-rentals",
          "name": "Real Estate Rentals"
        },
        "shelf": {
          "id": "real-estate-rentals",
          "name": "Real Estate Rentals"
        },
        "offering": {
          "id": "rental-listing-search",
          "name": "Rental Listing Search"
        },
        "pathIds": [
          "public-data",
          "real-estate-rentals",
          "real-estate-rentals",
          "rental-listing-search"
        ],
        "pathLabels": [
          "Public Data",
          "Real Estate Rentals",
          "Real Estate Rentals",
          "Rental Listing Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "rentals",
        "real-estate-rentals",
        "apartments",
        "housing",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "resourceId"
        ],
        "properties": {
          "resourceId": {
            "type": "string",
            "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
          },
          "searchSlug": {
            "type": "string",
            "default": "apartments-for-rent",
            "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent."
          },
          "maxPrice": {
            "type": "integer",
            "minimum": 0,
            "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0."
          },
          "minPrice": {
            "type": "integer",
            "minimum": 0,
            "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0."
          },
          "bedrooms": {
            "type": "string",
            "description": "Comma-separated bedroom filter, such as 1,2,3."
          },
          "bathrooms": {
            "type": "string",
            "description": "Comma-separated bathroom filter, such as 1,1.5,2."
          },
          "orderBy": {
            "type": "string",
            "enum": [
              "score",
              "recencyTime",
              "price"
            ],
            "default": "score",
            "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\"."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 25,
            "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "resourceId"
        ],
        "optional": [
          "searchSlug",
          "maxPrice",
          "minPrice",
          "bedrooms",
          "bathrooms",
          "orderBy",
          "limit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "resourceId",
            "type": "string",
            "required": true,
            "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
          },
          {
            "name": "searchSlug",
            "type": "string",
            "required": false,
            "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent.",
            "constraints": {
              "default": "apartments-for-rent"
            }
          },
          {
            "name": "maxPrice",
            "type": "integer",
            "required": false,
            "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "minPrice",
            "type": "integer",
            "required": false,
            "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "bedrooms",
            "type": "string",
            "required": false,
            "description": "Comma-separated bedroom filter, such as 1,2,3."
          },
          {
            "name": "bathrooms",
            "type": "string",
            "required": false,
            "description": "Comma-separated bathroom filter, such as 1,1.5,2."
          },
          {
            "name": "orderBy",
            "type": "string",
            "required": false,
            "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".",
            "constraints": {
              "enum": [
                "score",
                "recencyTime",
                "price"
              ],
              "default": "score"
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100.",
            "constraints": {
              "default": 25,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "resourceId": "san-francisco-ca",
          "searchSlug": "apartments-for-rent",
          "maxPrice": 4000,
          "bedrooms": "1,2",
          "limit": 10
        }
      },
      "exampleRequest": {
        "resourceId": "san-francisco-ca",
        "searchSlug": "apartments-for-rent",
        "maxPrice": 4000,
        "bedrooms": "1,2",
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "rental-listing-search",
          "name": "Rental Listing Search",
          "department": "Public Data"
        },
        "query": {
          "resource_id": "san-francisco-ca",
          "area_name": "San Francisco",
          "search_slug": "apartments-for-rent"
        },
        "results": [
          {
            "title": "NEMA",
            "street": "8 10th St",
            "city": "San Francisco",
            "state": "CA",
            "rent_min": 3750,
            "rent_max": 7925
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "resourceId": "san-francisco-ca",
                "searchSlug": "apartments-for-rent",
                "maxPrice": 4000,
                "bedrooms": "1,2",
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "rental-listing-search",
                  "name": "Rental Listing Search",
                  "department": "Public Data"
                },
                "query": {
                  "resource_id": "san-francisco-ca",
                  "area_name": "San Francisco",
                  "search_slug": "apartments-for-rent"
                },
                "results": [
                  {
                    "title": "NEMA",
                    "street": "8 10th St",
                    "city": "San Francisco",
                    "state": "CA",
                    "rent_min": 3750,
                    "rent_max": 7925
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/rental-listing-search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "resourceId"
                    ],
                    "properties": {
                      "resourceId": {
                        "type": "string",
                        "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
                      },
                      "searchSlug": {
                        "type": "string",
                        "default": "apartments-for-rent",
                        "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent."
                      },
                      "maxPrice": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0."
                      },
                      "minPrice": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0."
                      },
                      "bedrooms": {
                        "type": "string",
                        "description": "Comma-separated bedroom filter, such as 1,2,3."
                      },
                      "bathrooms": {
                        "type": "string",
                        "description": "Comma-separated bathroom filter, such as 1,1.5,2."
                      },
                      "orderBy": {
                        "type": "string",
                        "enum": [
                          "score",
                          "recencyTime",
                          "price"
                        ],
                        "default": "score",
                        "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\"."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100,
                        "default": 25,
                        "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "rental-listing-search",
            "url": "https://agentbodega.store/api/public-data/rental-listing-search",
            "method": "POST",
            "description": "Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.",
            "longDescription": "Purpose: Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nBest use: Use this when an agent needs find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resourceId.\nOptional fields: searchSlug, maxPrice, minPrice, bedrooms, bathrooms, orderBy, limit, proxiesSx.\n\nAccepted fields:\n- resourceId (required, string): Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca.\n- searchSlug (optional, string): Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent. Constraints: default: \"apartments-for-rent\".\n- maxPrice (optional, integer): Max Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- minPrice (optional, integer): Min Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- bedrooms (optional, string): Comma-separated bedroom filter, such as 1,2,3.\n- bathrooms (optional, string): Comma-separated bathroom filter, such as 1,1.5,2.\n- orderBy (optional, string): Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".\n- limit (optional, integer): Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resourceId\": \"san-francisco-ca\",\n  \"searchSlug\": \"apartments-for-rent\",\n  \"maxPrice\": 4000,\n  \"bedrooms\": \"1,2\",\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Rental Listing Search",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "rentals",
              "real-estate-rentals",
              "apartments",
              "housing",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "resourceId"
              ],
              "optional": [
                "searchSlug",
                "maxPrice",
                "minPrice",
                "bedrooms",
                "bathrooms",
                "orderBy",
                "limit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "resourceId",
                  "type": "string",
                  "required": true,
                  "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
                },
                {
                  "name": "searchSlug",
                  "type": "string",
                  "required": false,
                  "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent.",
                  "constraints": {
                    "default": "apartments-for-rent"
                  }
                },
                {
                  "name": "maxPrice",
                  "type": "integer",
                  "required": false,
                  "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "minPrice",
                  "type": "integer",
                  "required": false,
                  "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "bedrooms",
                  "type": "string",
                  "required": false,
                  "description": "Comma-separated bedroom filter, such as 1,2,3."
                },
                {
                  "name": "bathrooms",
                  "type": "string",
                  "required": false,
                  "description": "Comma-separated bathroom filter, such as 1,1.5,2."
                },
                {
                  "name": "orderBy",
                  "type": "string",
                  "required": false,
                  "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".",
                  "constraints": {
                    "enum": [
                      "score",
                      "recencyTime",
                      "price"
                    ],
                    "default": "score"
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100.",
                  "constraints": {
                    "default": 25,
                    "minimum": 1,
                    "maximum": 100
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "resourceId": "san-francisco-ca",
                "searchSlug": "apartments-for-rent",
                "maxPrice": 4000,
                "bedrooms": "1,2",
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "resourceId"
              ],
              "properties": {
                "resourceId": {
                  "type": "string",
                  "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
                },
                "searchSlug": {
                  "type": "string",
                  "default": "apartments-for-rent",
                  "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent."
                },
                "maxPrice": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0."
                },
                "minPrice": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0."
                },
                "bedrooms": {
                  "type": "string",
                  "description": "Comma-separated bedroom filter, such as 1,2,3."
                },
                "bathrooms": {
                  "type": "string",
                  "description": "Comma-separated bathroom filter, such as 1,1.5,2."
                },
                "orderBy": {
                  "type": "string",
                  "enum": [
                    "score",
                    "recencyTime",
                    "price"
                  ],
                  "default": "score",
                  "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\"."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100,
                  "default": 25,
                  "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/rental-listing-search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/rental-listing-search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "real-estate-rentals",
          "aisle": "Real Estate Rentals",
          "shelfId": "real-estate-rentals",
          "shelf": "Real Estate Rentals",
          "offeringId": "rental-listing-search",
          "offering": "Rental Listing Search",
          "pathIds": [
            "public-data",
            "real-estate-rentals",
            "real-estate-rentals",
            "rental-listing-search"
          ],
          "pathLabels": [
            "Public Data",
            "Real Estate Rentals",
            "Real Estate Rentals",
            "Rental Listing Search"
          ],
          "taxonomyPath": "public-data.real-estate-rentals.real-estate-rentals.rental-listing-search",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "real-estate-rentals",
              "name": "Real Estate Rentals"
            },
            "shelf": {
              "id": "real-estate-rentals",
              "name": "Real Estate Rentals"
            },
            "offering": {
              "id": "rental-listing-search",
              "name": "Rental Listing Search"
            },
            "pathIds": [
              "public-data",
              "real-estate-rentals",
              "real-estate-rentals",
              "rental-listing-search"
            ],
            "pathLabels": [
              "Public Data",
              "Real Estate Rentals",
              "Real Estate Rentals",
              "Rental Listing Search"
            ]
          }
        },
        "description": {
          "short": "Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.",
          "full": "Purpose: Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nBest use: Use this when an agent needs find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resourceId.\nOptional fields: searchSlug, maxPrice, minPrice, bedrooms, bathrooms, orderBy, limit, proxiesSx.\n\nAccepted fields:\n- resourceId (required, string): Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca.\n- searchSlug (optional, string): Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent. Constraints: default: \"apartments-for-rent\".\n- maxPrice (optional, integer): Max Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- minPrice (optional, integer): Min Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- bedrooms (optional, string): Comma-separated bedroom filter, such as 1,2,3.\n- bathrooms (optional, string): Comma-separated bathroom filter, such as 1,1.5,2.\n- orderBy (optional, string): Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".\n- limit (optional, integer): Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resourceId\": \"san-francisco-ca\",\n  \"searchSlug\": \"apartments-for-rent\",\n  \"maxPrice\": 4000,\n  \"bedrooms\": \"1,2\",\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "resourceId"
          ],
          "properties": {
            "resourceId": {
              "type": "string",
              "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
            },
            "searchSlug": {
              "type": "string",
              "default": "apartments-for-rent",
              "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent."
            },
            "maxPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0."
            },
            "minPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0."
            },
            "bedrooms": {
              "type": "string",
              "description": "Comma-separated bedroom filter, such as 1,2,3."
            },
            "bathrooms": {
              "type": "string",
              "description": "Comma-separated bathroom filter, such as 1,1.5,2."
            },
            "orderBy": {
              "type": "string",
              "enum": [
                "score",
                "recencyTime",
                "price"
              ],
              "default": "score",
              "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\"."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "resourceId"
          ],
          "properties": {
            "resourceId": {
              "type": "string",
              "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
            },
            "searchSlug": {
              "type": "string",
              "default": "apartments-for-rent",
              "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent."
            },
            "maxPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0."
            },
            "minPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0."
            },
            "bedrooms": {
              "type": "string",
              "description": "Comma-separated bedroom filter, such as 1,2,3."
            },
            "bathrooms": {
              "type": "string",
              "description": "Comma-separated bathroom filter, such as 1,1.5,2."
            },
            "orderBy": {
              "type": "string",
              "enum": [
                "score",
                "recencyTime",
                "price"
              ],
              "default": "score",
              "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\"."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "resourceId"
          ],
          "optional": [
            "searchSlug",
            "maxPrice",
            "minPrice",
            "bedrooms",
            "bathrooms",
            "orderBy",
            "limit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "resourceId",
              "type": "string",
              "required": true,
              "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
            },
            {
              "name": "searchSlug",
              "type": "string",
              "required": false,
              "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent.",
              "constraints": {
                "default": "apartments-for-rent"
              }
            },
            {
              "name": "maxPrice",
              "type": "integer",
              "required": false,
              "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "minPrice",
              "type": "integer",
              "required": false,
              "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "bedrooms",
              "type": "string",
              "required": false,
              "description": "Comma-separated bedroom filter, such as 1,2,3."
            },
            {
              "name": "bathrooms",
              "type": "string",
              "required": false,
              "description": "Comma-separated bathroom filter, such as 1,1.5,2."
            },
            {
              "name": "orderBy",
              "type": "string",
              "required": false,
              "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".",
              "constraints": {
                "enum": [
                  "score",
                  "recencyTime",
                  "price"
                ],
                "default": "score"
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100.",
              "constraints": {
                "default": 25,
                "minimum": 1,
                "maximum": 100
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "resourceId": "san-francisco-ca",
            "searchSlug": "apartments-for-rent",
            "maxPrice": 4000,
            "bedrooms": "1,2",
            "limit": 10
          }
        },
        "exampleRequest": {
          "resourceId": "san-francisco-ca",
          "searchSlug": "apartments-for-rent",
          "maxPrice": 4000,
          "bedrooms": "1,2",
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "rental-listing-search",
            "name": "Rental Listing Search",
            "department": "Public Data"
          },
          "query": {
            "resource_id": "san-francisco-ca",
            "area_name": "San Francisco",
            "search_slug": "apartments-for-rent"
          },
          "results": [
            {
              "title": "NEMA",
              "street": "8 10th St",
              "city": "San Francisco",
              "state": "CA",
              "rent_min": 3750,
              "rent_max": 7925
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/hospital-quality-rating",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Hospital Quality Rating",
      "description": "Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.",
      "longDescription": "Purpose: Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nBest use: Use this when an agent needs look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: ccn, careCompareUrl, hospitalName, city, state, includeMeasures, compareTo, proxiesSx.\n\nAccepted fields:\n- ccn (optional, string): Six-digit facility id.\n- careCompareUrl (optional, string): Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls. Constraints: format: uri.\n- hospitalName (optional, string): Hospital/facility name for lookup.\n- city (optional, string): City value for Hospital Quality Rating.\n- state (optional, string): Two-letter state abbreviation for name lookup.\n- includeMeasures (optional, boolean): Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true. Constraints: default: true.\n- compareTo (optional, array): Optional extra CCNs to fetch side by side. Constraints: max items: 3.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"ccn\": \"240010\",\n  \"includeMeasures\": true\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "healthcare-quality",
      "aisle": "Healthcare Quality",
      "shelfId": "healthcare-quality",
      "shelf": "Healthcare Quality",
      "offeringId": "hospital-quality-rating",
      "offering": "Hospital Quality Rating",
      "pathIds": [
        "public-data",
        "healthcare-quality",
        "healthcare-quality",
        "hospital-quality-rating"
      ],
      "pathLabels": [
        "Public Data",
        "Healthcare Quality",
        "Healthcare Quality",
        "Hospital Quality Rating"
      ],
      "taxonomyPath": "public-data.healthcare-quality.healthcare-quality.hospital-quality-rating",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "healthcare-quality",
          "name": "Healthcare Quality"
        },
        "shelf": {
          "id": "healthcare-quality",
          "name": "Healthcare Quality"
        },
        "offering": {
          "id": "hospital-quality-rating",
          "name": "Hospital Quality Rating"
        },
        "pathIds": [
          "public-data",
          "healthcare-quality",
          "healthcare-quality",
          "hospital-quality-rating"
        ],
        "pathLabels": [
          "Public Data",
          "Healthcare Quality",
          "Healthcare Quality",
          "Hospital Quality Rating"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "hospital",
        "healthcare",
        "ratings",
        "public-records",
        "quality",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "ccn": {
            "type": "string",
            "description": "Six-digit facility id."
          },
          "careCompareUrl": {
            "type": "string",
            "format": "uri",
            "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls."
          },
          "hospitalName": {
            "type": "string",
            "description": "Hospital/facility name for lookup."
          },
          "city": {
            "type": "string",
            "description": "City value for Hospital Quality Rating."
          },
          "state": {
            "type": "string",
            "description": "Two-letter state abbreviation for name lookup."
          },
          "includeMeasures": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true."
          },
          "compareTo": {
            "type": "array",
            "maxItems": 3,
            "items": {
              "type": "string",
              "description": "Compare To item value for Hospital Quality Rating."
            },
            "description": "Optional extra CCNs to fetch side by side."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "ccn",
          "careCompareUrl",
          "hospitalName",
          "city",
          "state",
          "includeMeasures",
          "compareTo",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "ccn",
            "type": "string",
            "required": false,
            "description": "Six-digit facility id."
          },
          {
            "name": "careCompareUrl",
            "type": "string",
            "required": false,
            "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "hospitalName",
            "type": "string",
            "required": false,
            "description": "Hospital/facility name for lookup."
          },
          {
            "name": "city",
            "type": "string",
            "required": false,
            "description": "City value for Hospital Quality Rating."
          },
          {
            "name": "state",
            "type": "string",
            "required": false,
            "description": "Two-letter state abbreviation for name lookup."
          },
          {
            "name": "includeMeasures",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "compareTo",
            "type": "array",
            "required": false,
            "description": "Optional extra CCNs to fetch side by side.",
            "constraints": {
              "maxItems": 3
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "ccn": "240010",
          "includeMeasures": true
        }
      },
      "exampleRequest": {
        "ccn": "240010",
        "includeMeasures": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "hospital-quality-rating",
          "name": "Hospital Quality Rating",
          "department": "Public Data"
        },
        "result": {
          "ccn": "240010",
          "facility_name": "MAYO CLINIC HOSPITAL ROCHESTER",
          "state": "MN",
          "overall_rating": "5",
          "measures": {
            "hcahps": [],
            "complications_and_deaths": []
          }
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "ccn": "240010",
                "includeMeasures": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "hospital-quality-rating",
                  "name": "Hospital Quality Rating",
                  "department": "Public Data"
                },
                "result": {
                  "ccn": "240010",
                  "facility_name": "MAYO CLINIC HOSPITAL ROCHESTER",
                  "state": "MN",
                  "overall_rating": "5",
                  "measures": {
                    "hcahps": [],
                    "complications_and_deaths": []
                  }
                }
              }
            }
          },
          "routeTemplate": "/api/public-data/hospital-quality-rating",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "ccn": {
                        "type": "string",
                        "description": "Six-digit facility id."
                      },
                      "careCompareUrl": {
                        "type": "string",
                        "format": "uri",
                        "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls."
                      },
                      "hospitalName": {
                        "type": "string",
                        "description": "Hospital/facility name for lookup."
                      },
                      "city": {
                        "type": "string",
                        "description": "City value for Hospital Quality Rating."
                      },
                      "state": {
                        "type": "string",
                        "description": "Two-letter state abbreviation for name lookup."
                      },
                      "includeMeasures": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true."
                      },
                      "compareTo": {
                        "type": "array",
                        "maxItems": 3,
                        "items": {
                          "type": "string",
                          "description": "Compare To item value for Hospital Quality Rating."
                        },
                        "description": "Optional extra CCNs to fetch side by side."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "hospital-quality-rating",
            "url": "https://agentbodega.store/api/public-data/hospital-quality-rating",
            "method": "POST",
            "description": "Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.",
            "longDescription": "Purpose: Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nBest use: Use this when an agent needs look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: ccn, careCompareUrl, hospitalName, city, state, includeMeasures, compareTo, proxiesSx.\n\nAccepted fields:\n- ccn (optional, string): Six-digit facility id.\n- careCompareUrl (optional, string): Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls. Constraints: format: uri.\n- hospitalName (optional, string): Hospital/facility name for lookup.\n- city (optional, string): City value for Hospital Quality Rating.\n- state (optional, string): Two-letter state abbreviation for name lookup.\n- includeMeasures (optional, boolean): Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true. Constraints: default: true.\n- compareTo (optional, array): Optional extra CCNs to fetch side by side. Constraints: max items: 3.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"ccn\": \"240010\",\n  \"includeMeasures\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Hospital Quality Rating",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "hospital",
              "healthcare",
              "ratings",
              "public-records",
              "quality",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "ccn",
                "careCompareUrl",
                "hospitalName",
                "city",
                "state",
                "includeMeasures",
                "compareTo",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "ccn",
                  "type": "string",
                  "required": false,
                  "description": "Six-digit facility id."
                },
                {
                  "name": "careCompareUrl",
                  "type": "string",
                  "required": false,
                  "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "hospitalName",
                  "type": "string",
                  "required": false,
                  "description": "Hospital/facility name for lookup."
                },
                {
                  "name": "city",
                  "type": "string",
                  "required": false,
                  "description": "City value for Hospital Quality Rating."
                },
                {
                  "name": "state",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter state abbreviation for name lookup."
                },
                {
                  "name": "includeMeasures",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "compareTo",
                  "type": "array",
                  "required": false,
                  "description": "Optional extra CCNs to fetch side by side.",
                  "constraints": {
                    "maxItems": 3
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "ccn": "240010",
                "includeMeasures": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "ccn": {
                  "type": "string",
                  "description": "Six-digit facility id."
                },
                "careCompareUrl": {
                  "type": "string",
                  "format": "uri",
                  "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls."
                },
                "hospitalName": {
                  "type": "string",
                  "description": "Hospital/facility name for lookup."
                },
                "city": {
                  "type": "string",
                  "description": "City value for Hospital Quality Rating."
                },
                "state": {
                  "type": "string",
                  "description": "Two-letter state abbreviation for name lookup."
                },
                "includeMeasures": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true."
                },
                "compareTo": {
                  "type": "array",
                  "maxItems": 3,
                  "items": {
                    "type": "string",
                    "description": "Compare To item value for Hospital Quality Rating."
                  },
                  "description": "Optional extra CCNs to fetch side by side."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/hospital-quality-rating",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/hospital-quality-rating",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "healthcare-quality",
          "aisle": "Healthcare Quality",
          "shelfId": "healthcare-quality",
          "shelf": "Healthcare Quality",
          "offeringId": "hospital-quality-rating",
          "offering": "Hospital Quality Rating",
          "pathIds": [
            "public-data",
            "healthcare-quality",
            "healthcare-quality",
            "hospital-quality-rating"
          ],
          "pathLabels": [
            "Public Data",
            "Healthcare Quality",
            "Healthcare Quality",
            "Hospital Quality Rating"
          ],
          "taxonomyPath": "public-data.healthcare-quality.healthcare-quality.hospital-quality-rating",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "healthcare-quality",
              "name": "Healthcare Quality"
            },
            "shelf": {
              "id": "healthcare-quality",
              "name": "Healthcare Quality"
            },
            "offering": {
              "id": "hospital-quality-rating",
              "name": "Hospital Quality Rating"
            },
            "pathIds": [
              "public-data",
              "healthcare-quality",
              "healthcare-quality",
              "hospital-quality-rating"
            ],
            "pathLabels": [
              "Public Data",
              "Healthcare Quality",
              "Healthcare Quality",
              "Hospital Quality Rating"
            ]
          }
        },
        "description": {
          "short": "Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.",
          "full": "Purpose: Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nBest use: Use this when an agent needs look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: ccn, careCompareUrl, hospitalName, city, state, includeMeasures, compareTo, proxiesSx.\n\nAccepted fields:\n- ccn (optional, string): Six-digit facility id.\n- careCompareUrl (optional, string): Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls. Constraints: format: uri.\n- hospitalName (optional, string): Hospital/facility name for lookup.\n- city (optional, string): City value for Hospital Quality Rating.\n- state (optional, string): Two-letter state abbreviation for name lookup.\n- includeMeasures (optional, boolean): Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true. Constraints: default: true.\n- compareTo (optional, array): Optional extra CCNs to fetch side by side. Constraints: max items: 3.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"ccn\": \"240010\",\n  \"includeMeasures\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "ccn": {
              "type": "string",
              "description": "Six-digit facility id."
            },
            "careCompareUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls."
            },
            "hospitalName": {
              "type": "string",
              "description": "Hospital/facility name for lookup."
            },
            "city": {
              "type": "string",
              "description": "City value for Hospital Quality Rating."
            },
            "state": {
              "type": "string",
              "description": "Two-letter state abbreviation for name lookup."
            },
            "includeMeasures": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true."
            },
            "compareTo": {
              "type": "array",
              "maxItems": 3,
              "items": {
                "type": "string",
                "description": "Compare To item value for Hospital Quality Rating."
              },
              "description": "Optional extra CCNs to fetch side by side."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "ccn": {
              "type": "string",
              "description": "Six-digit facility id."
            },
            "careCompareUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls."
            },
            "hospitalName": {
              "type": "string",
              "description": "Hospital/facility name for lookup."
            },
            "city": {
              "type": "string",
              "description": "City value for Hospital Quality Rating."
            },
            "state": {
              "type": "string",
              "description": "Two-letter state abbreviation for name lookup."
            },
            "includeMeasures": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true."
            },
            "compareTo": {
              "type": "array",
              "maxItems": 3,
              "items": {
                "type": "string",
                "description": "Compare To item value for Hospital Quality Rating."
              },
              "description": "Optional extra CCNs to fetch side by side."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "ccn",
            "careCompareUrl",
            "hospitalName",
            "city",
            "state",
            "includeMeasures",
            "compareTo",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "ccn",
              "type": "string",
              "required": false,
              "description": "Six-digit facility id."
            },
            {
              "name": "careCompareUrl",
              "type": "string",
              "required": false,
              "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "hospitalName",
              "type": "string",
              "required": false,
              "description": "Hospital/facility name for lookup."
            },
            {
              "name": "city",
              "type": "string",
              "required": false,
              "description": "City value for Hospital Quality Rating."
            },
            {
              "name": "state",
              "type": "string",
              "required": false,
              "description": "Two-letter state abbreviation for name lookup."
            },
            {
              "name": "includeMeasures",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "compareTo",
              "type": "array",
              "required": false,
              "description": "Optional extra CCNs to fetch side by side.",
              "constraints": {
                "maxItems": 3
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "ccn": "240010",
            "includeMeasures": true
          }
        },
        "exampleRequest": {
          "ccn": "240010",
          "includeMeasures": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "hospital-quality-rating",
            "name": "Hospital Quality Rating",
            "department": "Public Data"
          },
          "result": {
            "ccn": "240010",
            "facility_name": "MAYO CLINIC HOSPITAL ROCHESTER",
            "state": "MN",
            "overall_rating": "5",
            "measures": {
              "hcahps": [],
              "complications_and_deaths": []
            }
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/school-quality-rating",
      "type": "http",
      "x402Version": 2,
      "serviceName": "School Quality Rating Lookup",
      "description": "Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.",
      "longDescription": "Purpose: Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nBest use: Use this when an agent needs look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: schoolUrl, schoolName, city, state, includeCatchment, proxiesSx.\n\nAccepted fields:\n- schoolUrl (optional, string): Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls. Constraints: format: uri.\n- schoolName (optional, string): School name to resolve.\n- city (optional, string): City value for School Quality Rating Lookup.\n- state (optional, string): State value for School Quality Rating Lookup.\n- includeCatchment (optional, boolean): Include catchment GeoJSON when present. Large polygons are omitted by default. Constraints: default: false.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"schoolName\": \"Sylvia Mendez Elementary\",\n  \"city\": \"Berkeley\",\n  \"state\": \"CA\"\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "education-quality",
      "aisle": "Education Quality",
      "shelfId": "education-quality",
      "shelf": "Education Quality",
      "offeringId": "school-quality-rating",
      "offering": "School Quality Rating Lookup",
      "pathIds": [
        "public-data",
        "education-quality",
        "education-quality",
        "school-quality-rating"
      ],
      "pathLabels": [
        "Public Data",
        "Education Quality",
        "Education Quality",
        "School Quality Rating Lookup"
      ],
      "taxonomyPath": "public-data.education-quality.education-quality.school-quality-rating",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "education-quality",
          "name": "Education Quality"
        },
        "shelf": {
          "id": "education-quality",
          "name": "Education Quality"
        },
        "offering": {
          "id": "school-quality-rating",
          "name": "School Quality Rating Lookup"
        },
        "pathIds": [
          "public-data",
          "education-quality",
          "education-quality",
          "school-quality-rating"
        ],
        "pathLabels": [
          "Public Data",
          "Education Quality",
          "Education Quality",
          "School Quality Rating Lookup"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "schools",
        "ratings",
        "real-estate",
        "education",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "schoolUrl": {
            "type": "string",
            "format": "uri",
            "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls."
          },
          "schoolName": {
            "type": "string",
            "description": "School name to resolve."
          },
          "city": {
            "type": "string",
            "description": "City value for School Quality Rating Lookup."
          },
          "state": {
            "type": "string",
            "description": "State value for School Quality Rating Lookup."
          },
          "includeCatchment": {
            "type": "boolean",
            "default": false,
            "description": "Include catchment GeoJSON when present. Large polygons are omitted by default."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "schoolUrl",
          "schoolName",
          "city",
          "state",
          "includeCatchment",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "schoolUrl",
            "type": "string",
            "required": false,
            "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "schoolName",
            "type": "string",
            "required": false,
            "description": "School name to resolve."
          },
          {
            "name": "city",
            "type": "string",
            "required": false,
            "description": "City value for School Quality Rating Lookup."
          },
          {
            "name": "state",
            "type": "string",
            "required": false,
            "description": "State value for School Quality Rating Lookup."
          },
          {
            "name": "includeCatchment",
            "type": "boolean",
            "required": false,
            "description": "Include catchment GeoJSON when present. Large polygons are omitted by default.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "schoolName": "Sylvia Mendez Elementary",
          "city": "Berkeley",
          "state": "CA"
        }
      },
      "exampleRequest": {
        "schoolName": "Sylvia Mendez Elementary",
        "city": "Berkeley",
        "state": "CA"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "school-quality-rating",
          "name": "School Quality Rating Lookup",
          "department": "Public Data"
        },
        "result": {
          "name": "Sylvia Mendez Elementary",
          "school_id": "078571861",
          "great_schools_rating": 7,
          "grades_served": "K-5",
          "enrollment": 379,
          "district": {
            "name": "Berkeley Unified School District"
          }
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "schoolName": "Sylvia Mendez Elementary",
                "city": "Berkeley",
                "state": "CA"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "school-quality-rating",
                  "name": "School Quality Rating Lookup",
                  "department": "Public Data"
                },
                "result": {
                  "name": "Sylvia Mendez Elementary",
                  "school_id": "078571861",
                  "great_schools_rating": 7,
                  "grades_served": "K-5",
                  "enrollment": 379,
                  "district": {
                    "name": "Berkeley Unified School District"
                  }
                }
              }
            }
          },
          "routeTemplate": "/api/public-data/school-quality-rating",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "schoolUrl": {
                        "type": "string",
                        "format": "uri",
                        "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls."
                      },
                      "schoolName": {
                        "type": "string",
                        "description": "School name to resolve."
                      },
                      "city": {
                        "type": "string",
                        "description": "City value for School Quality Rating Lookup."
                      },
                      "state": {
                        "type": "string",
                        "description": "State value for School Quality Rating Lookup."
                      },
                      "includeCatchment": {
                        "type": "boolean",
                        "default": false,
                        "description": "Include catchment GeoJSON when present. Large polygons are omitted by default."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "school-quality-rating",
            "url": "https://agentbodega.store/api/public-data/school-quality-rating",
            "method": "POST",
            "description": "Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.",
            "longDescription": "Purpose: Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nBest use: Use this when an agent needs look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: schoolUrl, schoolName, city, state, includeCatchment, proxiesSx.\n\nAccepted fields:\n- schoolUrl (optional, string): Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls. Constraints: format: uri.\n- schoolName (optional, string): School name to resolve.\n- city (optional, string): City value for School Quality Rating Lookup.\n- state (optional, string): State value for School Quality Rating Lookup.\n- includeCatchment (optional, boolean): Include catchment GeoJSON when present. Large polygons are omitted by default. Constraints: default: false.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"schoolName\": \"Sylvia Mendez Elementary\",\n  \"city\": \"Berkeley\",\n  \"state\": \"CA\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "School Quality Rating Lookup",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "schools",
              "ratings",
              "real-estate",
              "education",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "schoolUrl",
                "schoolName",
                "city",
                "state",
                "includeCatchment",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "schoolUrl",
                  "type": "string",
                  "required": false,
                  "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "schoolName",
                  "type": "string",
                  "required": false,
                  "description": "School name to resolve."
                },
                {
                  "name": "city",
                  "type": "string",
                  "required": false,
                  "description": "City value for School Quality Rating Lookup."
                },
                {
                  "name": "state",
                  "type": "string",
                  "required": false,
                  "description": "State value for School Quality Rating Lookup."
                },
                {
                  "name": "includeCatchment",
                  "type": "boolean",
                  "required": false,
                  "description": "Include catchment GeoJSON when present. Large polygons are omitted by default.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "schoolName": "Sylvia Mendez Elementary",
                "city": "Berkeley",
                "state": "CA"
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "schoolUrl": {
                  "type": "string",
                  "format": "uri",
                  "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls."
                },
                "schoolName": {
                  "type": "string",
                  "description": "School name to resolve."
                },
                "city": {
                  "type": "string",
                  "description": "City value for School Quality Rating Lookup."
                },
                "state": {
                  "type": "string",
                  "description": "State value for School Quality Rating Lookup."
                },
                "includeCatchment": {
                  "type": "boolean",
                  "default": false,
                  "description": "Include catchment GeoJSON when present. Large polygons are omitted by default."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/school-quality-rating",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/school-quality-rating",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "education-quality",
          "aisle": "Education Quality",
          "shelfId": "education-quality",
          "shelf": "Education Quality",
          "offeringId": "school-quality-rating",
          "offering": "School Quality Rating Lookup",
          "pathIds": [
            "public-data",
            "education-quality",
            "education-quality",
            "school-quality-rating"
          ],
          "pathLabels": [
            "Public Data",
            "Education Quality",
            "Education Quality",
            "School Quality Rating Lookup"
          ],
          "taxonomyPath": "public-data.education-quality.education-quality.school-quality-rating",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "education-quality",
              "name": "Education Quality"
            },
            "shelf": {
              "id": "education-quality",
              "name": "Education Quality"
            },
            "offering": {
              "id": "school-quality-rating",
              "name": "School Quality Rating Lookup"
            },
            "pathIds": [
              "public-data",
              "education-quality",
              "education-quality",
              "school-quality-rating"
            ],
            "pathLabels": [
              "Public Data",
              "Education Quality",
              "Education Quality",
              "School Quality Rating Lookup"
            ]
          }
        },
        "description": {
          "short": "Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.",
          "full": "Purpose: Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nBest use: Use this when an agent needs look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: schoolUrl, schoolName, city, state, includeCatchment, proxiesSx.\n\nAccepted fields:\n- schoolUrl (optional, string): Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls. Constraints: format: uri.\n- schoolName (optional, string): School name to resolve.\n- city (optional, string): City value for School Quality Rating Lookup.\n- state (optional, string): State value for School Quality Rating Lookup.\n- includeCatchment (optional, boolean): Include catchment GeoJSON when present. Large polygons are omitted by default. Constraints: default: false.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"schoolName\": \"Sylvia Mendez Elementary\",\n  \"city\": \"Berkeley\",\n  \"state\": \"CA\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "schoolUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls."
            },
            "schoolName": {
              "type": "string",
              "description": "School name to resolve."
            },
            "city": {
              "type": "string",
              "description": "City value for School Quality Rating Lookup."
            },
            "state": {
              "type": "string",
              "description": "State value for School Quality Rating Lookup."
            },
            "includeCatchment": {
              "type": "boolean",
              "default": false,
              "description": "Include catchment GeoJSON when present. Large polygons are omitted by default."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "schoolUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls."
            },
            "schoolName": {
              "type": "string",
              "description": "School name to resolve."
            },
            "city": {
              "type": "string",
              "description": "City value for School Quality Rating Lookup."
            },
            "state": {
              "type": "string",
              "description": "State value for School Quality Rating Lookup."
            },
            "includeCatchment": {
              "type": "boolean",
              "default": false,
              "description": "Include catchment GeoJSON when present. Large polygons are omitted by default."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "schoolUrl",
            "schoolName",
            "city",
            "state",
            "includeCatchment",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "schoolUrl",
              "type": "string",
              "required": false,
              "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "schoolName",
              "type": "string",
              "required": false,
              "description": "School name to resolve."
            },
            {
              "name": "city",
              "type": "string",
              "required": false,
              "description": "City value for School Quality Rating Lookup."
            },
            {
              "name": "state",
              "type": "string",
              "required": false,
              "description": "State value for School Quality Rating Lookup."
            },
            {
              "name": "includeCatchment",
              "type": "boolean",
              "required": false,
              "description": "Include catchment GeoJSON when present. Large polygons are omitted by default.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "schoolName": "Sylvia Mendez Elementary",
            "city": "Berkeley",
            "state": "CA"
          }
        },
        "exampleRequest": {
          "schoolName": "Sylvia Mendez Elementary",
          "city": "Berkeley",
          "state": "CA"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "school-quality-rating",
            "name": "School Quality Rating Lookup",
            "department": "Public Data"
          },
          "result": {
            "name": "Sylvia Mendez Elementary",
            "school_id": "078571861",
            "great_schools_rating": 7,
            "grades_served": "K-5",
            "enrollment": 379,
            "district": {
              "name": "Berkeley Unified School District"
            }
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/home-comparable-sales",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Home Comparable Sales",
      "description": "Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.",
      "longDescription": "Purpose: Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nBest use: Use this when an agent needs return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: regionId, regionType, market, lat, lon, radiusMiles, soldWithinDays, minPrice, maxPrice, minBeds, maxBeds, minBaths, maxBaths, limit, proxiesSx.\n\nAccepted fields:\n- regionId (optional, string): Market region id, such as city id or ZIP region id.\n- regionType (optional, integer): Market region type. Common values: 2 for ZIP, 6 for city. Constraints: default: 6.\n- market (optional, string): Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston.\n- lat (optional, number): Subject latitude for a bounded-radius polygon search.\n- lon (optional, number): Subject longitude for a bounded-radius polygon search.\n- radiusMiles (optional, number): Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25. Constraints: default: 1; min: 0.1; max: 25.\n- soldWithinDays (optional, integer): Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.\n- minPrice (optional, integer): Min Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxPrice (optional, integer): Max Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBeds (optional, integer): Min Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBeds (optional, integer): Max Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBaths (optional, number): Min Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBaths (optional, number): Max Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- limit (optional, integer): Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50. Constraints: default: 10; min: 1; max: 50.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"regionId\": \"17151\",\n  \"regionType\": 6,\n  \"market\": \"sanfrancisco\",\n  \"soldWithinDays\": 180,\n  \"minBeds\": 2,\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "real-estate-comps",
      "aisle": "Real Estate Comps",
      "shelfId": "real-estate-comps",
      "shelf": "Real Estate Comps",
      "offeringId": "home-comparable-sales",
      "offering": "Home Comparable Sales",
      "pathIds": [
        "public-data",
        "real-estate-comps",
        "real-estate-comps",
        "home-comparable-sales"
      ],
      "pathLabels": [
        "Public Data",
        "Real Estate Comps",
        "Real Estate Comps",
        "Home Comparable Sales"
      ],
      "taxonomyPath": "public-data.real-estate-comps.real-estate-comps.home-comparable-sales",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "real-estate-comps",
          "name": "Real Estate Comps"
        },
        "shelf": {
          "id": "real-estate-comps",
          "name": "Real Estate Comps"
        },
        "offering": {
          "id": "home-comparable-sales",
          "name": "Home Comparable Sales"
        },
        "pathIds": [
          "public-data",
          "real-estate-comps",
          "real-estate-comps",
          "home-comparable-sales"
        ],
        "pathLabels": [
          "Public Data",
          "Real Estate Comps",
          "Real Estate Comps",
          "Home Comparable Sales"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "comparable-sales",
        "real-estate",
        "sold-comps",
        "valuation",
        "public-data",
        "redfin",
        "redfin-comps"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "30000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "30000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "regionId": {
            "type": "string",
            "description": "Market region id, such as city id or ZIP region id."
          },
          "regionType": {
            "type": "integer",
            "default": 6,
            "description": "Market region type. Common values: 2 for ZIP, 6 for city."
          },
          "market": {
            "type": "string",
            "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
          },
          "lat": {
            "type": "number",
            "description": "Subject latitude for a bounded-radius polygon search."
          },
          "lon": {
            "type": "number",
            "description": "Subject longitude for a bounded-radius polygon search."
          },
          "radiusMiles": {
            "type": "number",
            "minimum": 0.1,
            "maximum": 25,
            "default": 1,
            "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25."
          },
          "soldWithinDays": {
            "type": "integer",
            "enum": [
              30,
              90,
              180,
              365,
              730,
              1095
            ],
            "default": 180,
            "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180."
          },
          "minPrice": {
            "type": "integer",
            "minimum": 0,
            "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "maxPrice": {
            "type": "integer",
            "minimum": 0,
            "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "minBeds": {
            "type": "integer",
            "minimum": 0,
            "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "maxBeds": {
            "type": "integer",
            "minimum": 0,
            "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "minBaths": {
            "type": "number",
            "minimum": 0,
            "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "maxBaths": {
            "type": "number",
            "minimum": 0,
            "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "regionId",
          "regionType",
          "market",
          "lat",
          "lon",
          "radiusMiles",
          "soldWithinDays",
          "minPrice",
          "maxPrice",
          "minBeds",
          "maxBeds",
          "minBaths",
          "maxBaths",
          "limit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "regionId",
            "type": "string",
            "required": false,
            "description": "Market region id, such as city id or ZIP region id."
          },
          {
            "name": "regionType",
            "type": "integer",
            "required": false,
            "description": "Market region type. Common values: 2 for ZIP, 6 for city.",
            "constraints": {
              "default": 6
            }
          },
          {
            "name": "market",
            "type": "string",
            "required": false,
            "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
          },
          {
            "name": "lat",
            "type": "number",
            "required": false,
            "description": "Subject latitude for a bounded-radius polygon search."
          },
          {
            "name": "lon",
            "type": "number",
            "required": false,
            "description": "Subject longitude for a bounded-radius polygon search."
          },
          {
            "name": "radiusMiles",
            "type": "number",
            "required": false,
            "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25.",
            "constraints": {
              "default": 1,
              "minimum": 0.1,
              "maximum": 25
            }
          },
          {
            "name": "soldWithinDays",
            "type": "integer",
            "required": false,
            "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.",
            "constraints": {
              "enum": [
                30,
                90,
                180,
                365,
                730,
                1095
              ],
              "default": 180
            }
          },
          {
            "name": "minPrice",
            "type": "integer",
            "required": false,
            "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "maxPrice",
            "type": "integer",
            "required": false,
            "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "minBeds",
            "type": "integer",
            "required": false,
            "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "maxBeds",
            "type": "integer",
            "required": false,
            "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "minBaths",
            "type": "number",
            "required": false,
            "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "maxBaths",
            "type": "number",
            "required": false,
            "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "regionId": "17151",
          "regionType": 6,
          "market": "sanfrancisco",
          "soldWithinDays": 180,
          "minBeds": 2,
          "limit": 10
        }
      },
      "exampleRequest": {
        "regionId": "17151",
        "regionType": 6,
        "market": "sanfrancisco",
        "soldWithinDays": 180,
        "minBeds": 2,
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "home-comparable-sales",
          "name": "Home Comparable Sales",
          "department": "Public Data"
        },
        "result": {
          "subject": {
            "region_id": "17151",
            "market": "sanfrancisco"
          },
          "comps": [
            {
              "address": "123 Example St",
              "price": 1275000,
              "beds": 3,
              "baths": 2,
              "sqft": 1420,
              "sold_date": "2026-05-15"
            }
          ]
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "regionId": "17151",
                "regionType": 6,
                "market": "sanfrancisco",
                "soldWithinDays": 180,
                "minBeds": 2,
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "home-comparable-sales",
                  "name": "Home Comparable Sales",
                  "department": "Public Data"
                },
                "result": {
                  "subject": {
                    "region_id": "17151",
                    "market": "sanfrancisco"
                  },
                  "comps": [
                    {
                      "address": "123 Example St",
                      "price": 1275000,
                      "beds": 3,
                      "baths": 2,
                      "sqft": 1420,
                      "sold_date": "2026-05-15"
                    }
                  ]
                }
              }
            }
          },
          "routeTemplate": "/api/public-data/home-comparable-sales",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "regionId": {
                        "type": "string",
                        "description": "Market region id, such as city id or ZIP region id."
                      },
                      "regionType": {
                        "type": "integer",
                        "default": 6,
                        "description": "Market region type. Common values: 2 for ZIP, 6 for city."
                      },
                      "market": {
                        "type": "string",
                        "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
                      },
                      "lat": {
                        "type": "number",
                        "description": "Subject latitude for a bounded-radius polygon search."
                      },
                      "lon": {
                        "type": "number",
                        "description": "Subject longitude for a bounded-radius polygon search."
                      },
                      "radiusMiles": {
                        "type": "number",
                        "minimum": 0.1,
                        "maximum": 25,
                        "default": 1,
                        "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25."
                      },
                      "soldWithinDays": {
                        "type": "integer",
                        "enum": [
                          30,
                          90,
                          180,
                          365,
                          730,
                          1095
                        ],
                        "default": 180,
                        "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180."
                      },
                      "minPrice": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "maxPrice": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "minBeds": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "maxBeds": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "minBaths": {
                        "type": "number",
                        "minimum": 0,
                        "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "maxBaths": {
                        "type": "number",
                        "minimum": 0,
                        "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 50,
                        "default": 10,
                        "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "home-comparable-sales",
            "url": "https://agentbodega.store/api/public-data/home-comparable-sales",
            "method": "POST",
            "description": "Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.",
            "longDescription": "Purpose: Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nBest use: Use this when an agent needs return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: regionId, regionType, market, lat, lon, radiusMiles, soldWithinDays, minPrice, maxPrice, minBeds, maxBeds, minBaths, maxBaths, limit, proxiesSx.\n\nAccepted fields:\n- regionId (optional, string): Market region id, such as city id or ZIP region id.\n- regionType (optional, integer): Market region type. Common values: 2 for ZIP, 6 for city. Constraints: default: 6.\n- market (optional, string): Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston.\n- lat (optional, number): Subject latitude for a bounded-radius polygon search.\n- lon (optional, number): Subject longitude for a bounded-radius polygon search.\n- radiusMiles (optional, number): Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25. Constraints: default: 1; min: 0.1; max: 25.\n- soldWithinDays (optional, integer): Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.\n- minPrice (optional, integer): Min Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxPrice (optional, integer): Max Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBeds (optional, integer): Min Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBeds (optional, integer): Max Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBaths (optional, number): Min Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBaths (optional, number): Max Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- limit (optional, integer): Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50. Constraints: default: 10; min: 1; max: 50.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"regionId\": \"17151\",\n  \"regionType\": 6,\n  \"market\": \"sanfrancisco\",\n  \"soldWithinDays\": 180,\n  \"minBeds\": 2,\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Home Comparable Sales",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "comparable-sales",
              "real-estate",
              "sold-comps",
              "valuation",
              "public-data",
              "redfin",
              "redfin-comps"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "regionId",
                "regionType",
                "market",
                "lat",
                "lon",
                "radiusMiles",
                "soldWithinDays",
                "minPrice",
                "maxPrice",
                "minBeds",
                "maxBeds",
                "minBaths",
                "maxBaths",
                "limit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "regionId",
                  "type": "string",
                  "required": false,
                  "description": "Market region id, such as city id or ZIP region id."
                },
                {
                  "name": "regionType",
                  "type": "integer",
                  "required": false,
                  "description": "Market region type. Common values: 2 for ZIP, 6 for city.",
                  "constraints": {
                    "default": 6
                  }
                },
                {
                  "name": "market",
                  "type": "string",
                  "required": false,
                  "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
                },
                {
                  "name": "lat",
                  "type": "number",
                  "required": false,
                  "description": "Subject latitude for a bounded-radius polygon search."
                },
                {
                  "name": "lon",
                  "type": "number",
                  "required": false,
                  "description": "Subject longitude for a bounded-radius polygon search."
                },
                {
                  "name": "radiusMiles",
                  "type": "number",
                  "required": false,
                  "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25.",
                  "constraints": {
                    "default": 1,
                    "minimum": 0.1,
                    "maximum": 25
                  }
                },
                {
                  "name": "soldWithinDays",
                  "type": "integer",
                  "required": false,
                  "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.",
                  "constraints": {
                    "enum": [
                      30,
                      90,
                      180,
                      365,
                      730,
                      1095
                    ],
                    "default": 180
                  }
                },
                {
                  "name": "minPrice",
                  "type": "integer",
                  "required": false,
                  "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "maxPrice",
                  "type": "integer",
                  "required": false,
                  "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "minBeds",
                  "type": "integer",
                  "required": false,
                  "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "maxBeds",
                  "type": "integer",
                  "required": false,
                  "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "minBaths",
                  "type": "number",
                  "required": false,
                  "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "maxBaths",
                  "type": "number",
                  "required": false,
                  "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 50
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "regionId": "17151",
                "regionType": 6,
                "market": "sanfrancisco",
                "soldWithinDays": 180,
                "minBeds": 2,
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "regionId": {
                  "type": "string",
                  "description": "Market region id, such as city id or ZIP region id."
                },
                "regionType": {
                  "type": "integer",
                  "default": 6,
                  "description": "Market region type. Common values: 2 for ZIP, 6 for city."
                },
                "market": {
                  "type": "string",
                  "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
                },
                "lat": {
                  "type": "number",
                  "description": "Subject latitude for a bounded-radius polygon search."
                },
                "lon": {
                  "type": "number",
                  "description": "Subject longitude for a bounded-radius polygon search."
                },
                "radiusMiles": {
                  "type": "number",
                  "minimum": 0.1,
                  "maximum": 25,
                  "default": 1,
                  "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25."
                },
                "soldWithinDays": {
                  "type": "integer",
                  "enum": [
                    30,
                    90,
                    180,
                    365,
                    730,
                    1095
                  ],
                  "default": 180,
                  "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180."
                },
                "minPrice": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "maxPrice": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "minBeds": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "maxBeds": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "minBaths": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "maxBaths": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 50,
                  "default": 10,
                  "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.03"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.03",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/home-comparable-sales",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.03"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/home-comparable-sales",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "real-estate-comps",
          "aisle": "Real Estate Comps",
          "shelfId": "real-estate-comps",
          "shelf": "Real Estate Comps",
          "offeringId": "home-comparable-sales",
          "offering": "Home Comparable Sales",
          "pathIds": [
            "public-data",
            "real-estate-comps",
            "real-estate-comps",
            "home-comparable-sales"
          ],
          "pathLabels": [
            "Public Data",
            "Real Estate Comps",
            "Real Estate Comps",
            "Home Comparable Sales"
          ],
          "taxonomyPath": "public-data.real-estate-comps.real-estate-comps.home-comparable-sales",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "real-estate-comps",
              "name": "Real Estate Comps"
            },
            "shelf": {
              "id": "real-estate-comps",
              "name": "Real Estate Comps"
            },
            "offering": {
              "id": "home-comparable-sales",
              "name": "Home Comparable Sales"
            },
            "pathIds": [
              "public-data",
              "real-estate-comps",
              "real-estate-comps",
              "home-comparable-sales"
            ],
            "pathLabels": [
              "Public Data",
              "Real Estate Comps",
              "Real Estate Comps",
              "Home Comparable Sales"
            ]
          }
        },
        "description": {
          "short": "Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.",
          "full": "Purpose: Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nBest use: Use this when an agent needs return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: regionId, regionType, market, lat, lon, radiusMiles, soldWithinDays, minPrice, maxPrice, minBeds, maxBeds, minBaths, maxBaths, limit, proxiesSx.\n\nAccepted fields:\n- regionId (optional, string): Market region id, such as city id or ZIP region id.\n- regionType (optional, integer): Market region type. Common values: 2 for ZIP, 6 for city. Constraints: default: 6.\n- market (optional, string): Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston.\n- lat (optional, number): Subject latitude for a bounded-radius polygon search.\n- lon (optional, number): Subject longitude for a bounded-radius polygon search.\n- radiusMiles (optional, number): Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25. Constraints: default: 1; min: 0.1; max: 25.\n- soldWithinDays (optional, integer): Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.\n- minPrice (optional, integer): Min Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxPrice (optional, integer): Max Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBeds (optional, integer): Min Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBeds (optional, integer): Max Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBaths (optional, number): Min Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBaths (optional, number): Max Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- limit (optional, integer): Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50. Constraints: default: 10; min: 1; max: 50.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"regionId\": \"17151\",\n  \"regionType\": 6,\n  \"market\": \"sanfrancisco\",\n  \"soldWithinDays\": 180,\n  \"minBeds\": 2,\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "regionId": {
              "type": "string",
              "description": "Market region id, such as city id or ZIP region id."
            },
            "regionType": {
              "type": "integer",
              "default": 6,
              "description": "Market region type. Common values: 2 for ZIP, 6 for city."
            },
            "market": {
              "type": "string",
              "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
            },
            "lat": {
              "type": "number",
              "description": "Subject latitude for a bounded-radius polygon search."
            },
            "lon": {
              "type": "number",
              "description": "Subject longitude for a bounded-radius polygon search."
            },
            "radiusMiles": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 25,
              "default": 1,
              "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25."
            },
            "soldWithinDays": {
              "type": "integer",
              "enum": [
                30,
                90,
                180,
                365,
                730,
                1095
              ],
              "default": 180,
              "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180."
            },
            "minPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "minBeds": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxBeds": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "minBaths": {
              "type": "number",
              "minimum": 0,
              "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxBaths": {
              "type": "number",
              "minimum": 0,
              "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10,
              "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "regionId": {
              "type": "string",
              "description": "Market region id, such as city id or ZIP region id."
            },
            "regionType": {
              "type": "integer",
              "default": 6,
              "description": "Market region type. Common values: 2 for ZIP, 6 for city."
            },
            "market": {
              "type": "string",
              "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
            },
            "lat": {
              "type": "number",
              "description": "Subject latitude for a bounded-radius polygon search."
            },
            "lon": {
              "type": "number",
              "description": "Subject longitude for a bounded-radius polygon search."
            },
            "radiusMiles": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 25,
              "default": 1,
              "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25."
            },
            "soldWithinDays": {
              "type": "integer",
              "enum": [
                30,
                90,
                180,
                365,
                730,
                1095
              ],
              "default": 180,
              "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180."
            },
            "minPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "minBeds": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxBeds": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "minBaths": {
              "type": "number",
              "minimum": 0,
              "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxBaths": {
              "type": "number",
              "minimum": 0,
              "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10,
              "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "regionId",
            "regionType",
            "market",
            "lat",
            "lon",
            "radiusMiles",
            "soldWithinDays",
            "minPrice",
            "maxPrice",
            "minBeds",
            "maxBeds",
            "minBaths",
            "maxBaths",
            "limit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "regionId",
              "type": "string",
              "required": false,
              "description": "Market region id, such as city id or ZIP region id."
            },
            {
              "name": "regionType",
              "type": "integer",
              "required": false,
              "description": "Market region type. Common values: 2 for ZIP, 6 for city.",
              "constraints": {
                "default": 6
              }
            },
            {
              "name": "market",
              "type": "string",
              "required": false,
              "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
            },
            {
              "name": "lat",
              "type": "number",
              "required": false,
              "description": "Subject latitude for a bounded-radius polygon search."
            },
            {
              "name": "lon",
              "type": "number",
              "required": false,
              "description": "Subject longitude for a bounded-radius polygon search."
            },
            {
              "name": "radiusMiles",
              "type": "number",
              "required": false,
              "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25.",
              "constraints": {
                "default": 1,
                "minimum": 0.1,
                "maximum": 25
              }
            },
            {
              "name": "soldWithinDays",
              "type": "integer",
              "required": false,
              "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.",
              "constraints": {
                "enum": [
                  30,
                  90,
                  180,
                  365,
                  730,
                  1095
                ],
                "default": 180
              }
            },
            {
              "name": "minPrice",
              "type": "integer",
              "required": false,
              "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "maxPrice",
              "type": "integer",
              "required": false,
              "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "minBeds",
              "type": "integer",
              "required": false,
              "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "maxBeds",
              "type": "integer",
              "required": false,
              "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "minBaths",
              "type": "number",
              "required": false,
              "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "maxBaths",
              "type": "number",
              "required": false,
              "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 50
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "regionId": "17151",
            "regionType": 6,
            "market": "sanfrancisco",
            "soldWithinDays": 180,
            "minBeds": 2,
            "limit": 10
          }
        },
        "exampleRequest": {
          "regionId": "17151",
          "regionType": 6,
          "market": "sanfrancisco",
          "soldWithinDays": 180,
          "minBeds": 2,
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "home-comparable-sales",
            "name": "Home Comparable Sales",
            "department": "Public Data"
          },
          "result": {
            "subject": {
              "region_id": "17151",
              "market": "sanfrancisco"
            },
            "comps": [
              {
                "address": "123 Example St",
                "price": 1275000,
                "beds": 3,
                "baths": 2,
                "sqft": 1420,
                "sold_date": "2026-05-15"
              }
            ]
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/volunteer-opportunity-search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Volunteer Opportunity Search",
      "description": "Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.",
      "longDescription": "Purpose: Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nBest use: Use this when an agent needs search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, opportunityUrl, lat, lon, radiusMiles, remote, categories, page, limit, proxiesSx.\n\nAccepted fields:\n- query (optional, string): Search text.\n- opportunityUrl (optional, string): Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls. Constraints: format: uri.\n- lat (optional, number): Lat numeric value for Volunteer Opportunity Search.\n- lon (optional, number): Lon numeric value for Volunteer Opportunity Search.\n- radiusMiles (optional, number): Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250. Constraints: default: 25; min: 1; max: 250.\n- remote (optional, boolean): Filter for remote/virtual opportunities.\n- categories (optional, array): Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT. Constraints: max items: 8.\n- page (optional, integer): Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100. Constraints: default: 0; min: 0; max: 100.\n- limit (optional, integer): Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100. Constraints: default: 20; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"query\": \"food bank\",\n  \"lat\": 40.7128,\n  \"lon\": -74.006,\n  \"radiusMiles\": 25,\n  \"categories\": [\n    \"HUNGER_FOOD_SECURITY\"\n  ],\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "civic-opportunities",
      "aisle": "Civic Opportunities",
      "shelfId": "civic-opportunities",
      "shelf": "Civic Opportunities",
      "offeringId": "volunteer-opportunity-search",
      "offering": "Volunteer Opportunity Search",
      "pathIds": [
        "public-data",
        "civic-opportunities",
        "civic-opportunities",
        "volunteer-opportunity-search"
      ],
      "pathLabels": [
        "Public Data",
        "Civic Opportunities",
        "Civic Opportunities",
        "Volunteer Opportunity Search"
      ],
      "taxonomyPath": "public-data.civic-opportunities.civic-opportunities.volunteer-opportunity-search",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "civic-opportunities",
          "name": "Civic Opportunities"
        },
        "shelf": {
          "id": "civic-opportunities",
          "name": "Civic Opportunities"
        },
        "offering": {
          "id": "volunteer-opportunity-search",
          "name": "Volunteer Opportunity Search"
        },
        "pathIds": [
          "public-data",
          "civic-opportunities",
          "civic-opportunities",
          "volunteer-opportunity-search"
        ],
        "pathLabels": [
          "Public Data",
          "Civic Opportunities",
          "Civic Opportunities",
          "Volunteer Opportunity Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "volunteering",
        "opportunities",
        "civic",
        "nonprofit",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Search text."
          },
          "opportunityUrl": {
            "type": "string",
            "format": "uri",
            "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls."
          },
          "lat": {
            "type": "number",
            "description": "Lat numeric value for Volunteer Opportunity Search."
          },
          "lon": {
            "type": "number",
            "description": "Lon numeric value for Volunteer Opportunity Search."
          },
          "radiusMiles": {
            "type": "number",
            "minimum": 1,
            "maximum": 250,
            "default": 25,
            "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250."
          },
          "remote": {
            "type": "boolean",
            "description": "Filter for remote/virtual opportunities."
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Categories item value for Volunteer Opportunity Search."
            },
            "maxItems": 8,
            "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT."
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "default": 0,
            "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "opportunityUrl",
          "lat",
          "lon",
          "radiusMiles",
          "remote",
          "categories",
          "page",
          "limit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Search text."
          },
          {
            "name": "opportunityUrl",
            "type": "string",
            "required": false,
            "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "lat",
            "type": "number",
            "required": false,
            "description": "Lat numeric value for Volunteer Opportunity Search."
          },
          {
            "name": "lon",
            "type": "number",
            "required": false,
            "description": "Lon numeric value for Volunteer Opportunity Search."
          },
          {
            "name": "radiusMiles",
            "type": "number",
            "required": false,
            "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250.",
            "constraints": {
              "default": 25,
              "minimum": 1,
              "maximum": 250
            }
          },
          {
            "name": "remote",
            "type": "boolean",
            "required": false,
            "description": "Filter for remote/virtual opportunities."
          },
          {
            "name": "categories",
            "type": "array",
            "required": false,
            "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT.",
            "constraints": {
              "maxItems": 8
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "type": "integer",
            "required": false,
            "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100.",
            "constraints": {
              "default": 0,
              "minimum": 0,
              "maximum": 100
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100.",
            "constraints": {
              "default": 20,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "food bank",
          "lat": 40.7128,
          "lon": -74.006,
          "radiusMiles": 25,
          "categories": [
            "HUNGER_FOOD_SECURITY"
          ],
          "limit": 10
        }
      },
      "exampleRequest": {
        "query": "food bank",
        "lat": 40.7128,
        "lon": -74.006,
        "radiusMiles": 25,
        "categories": [
          "HUNGER_FOOD_SECURITY"
        ],
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "volunteer-opportunity-search",
          "name": "Volunteer Opportunity Search",
          "department": "Public Data"
        },
        "total": 128,
        "results": [
          {
            "id": "abc123",
            "title": "Pack meals for neighbors",
            "organization": "Example Food Bank",
            "location": {
              "city": "New York",
              "state": "NY"
            },
            "remote": false
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "food bank",
                "lat": 40.7128,
                "lon": -74.006,
                "radiusMiles": 25,
                "categories": [
                  "HUNGER_FOOD_SECURITY"
                ],
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "volunteer-opportunity-search",
                  "name": "Volunteer Opportunity Search",
                  "department": "Public Data"
                },
                "total": 128,
                "results": [
                  {
                    "id": "abc123",
                    "title": "Pack meals for neighbors",
                    "organization": "Example Food Bank",
                    "location": {
                      "city": "New York",
                      "state": "NY"
                    },
                    "remote": false
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/volunteer-opportunity-search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "description": "Search text."
                      },
                      "opportunityUrl": {
                        "type": "string",
                        "format": "uri",
                        "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls."
                      },
                      "lat": {
                        "type": "number",
                        "description": "Lat numeric value for Volunteer Opportunity Search."
                      },
                      "lon": {
                        "type": "number",
                        "description": "Lon numeric value for Volunteer Opportunity Search."
                      },
                      "radiusMiles": {
                        "type": "number",
                        "minimum": 1,
                        "maximum": 250,
                        "default": 25,
                        "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250."
                      },
                      "remote": {
                        "type": "boolean",
                        "description": "Filter for remote/virtual opportunities."
                      },
                      "categories": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Categories item value for Volunteer Opportunity Search."
                        },
                        "maxItems": 8,
                        "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT."
                      },
                      "page": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 100,
                        "default": 0,
                        "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100,
                        "default": 20,
                        "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "volunteer-opportunity-search",
            "url": "https://agentbodega.store/api/public-data/volunteer-opportunity-search",
            "method": "POST",
            "description": "Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.",
            "longDescription": "Purpose: Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nBest use: Use this when an agent needs search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, opportunityUrl, lat, lon, radiusMiles, remote, categories, page, limit, proxiesSx.\n\nAccepted fields:\n- query (optional, string): Search text.\n- opportunityUrl (optional, string): Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls. Constraints: format: uri.\n- lat (optional, number): Lat numeric value for Volunteer Opportunity Search.\n- lon (optional, number): Lon numeric value for Volunteer Opportunity Search.\n- radiusMiles (optional, number): Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250. Constraints: default: 25; min: 1; max: 250.\n- remote (optional, boolean): Filter for remote/virtual opportunities.\n- categories (optional, array): Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT. Constraints: max items: 8.\n- page (optional, integer): Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100. Constraints: default: 0; min: 0; max: 100.\n- limit (optional, integer): Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100. Constraints: default: 20; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"query\": \"food bank\",\n  \"lat\": 40.7128,\n  \"lon\": -74.006,\n  \"radiusMiles\": 25,\n  \"categories\": [\n    \"HUNGER_FOOD_SECURITY\"\n  ],\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Volunteer Opportunity Search",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "volunteering",
              "opportunities",
              "civic",
              "nonprofit",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "opportunityUrl",
                "lat",
                "lon",
                "radiusMiles",
                "remote",
                "categories",
                "page",
                "limit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Search text."
                },
                {
                  "name": "opportunityUrl",
                  "type": "string",
                  "required": false,
                  "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "lat",
                  "type": "number",
                  "required": false,
                  "description": "Lat numeric value for Volunteer Opportunity Search."
                },
                {
                  "name": "lon",
                  "type": "number",
                  "required": false,
                  "description": "Lon numeric value for Volunteer Opportunity Search."
                },
                {
                  "name": "radiusMiles",
                  "type": "number",
                  "required": false,
                  "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250.",
                  "constraints": {
                    "default": 25,
                    "minimum": 1,
                    "maximum": 250
                  }
                },
                {
                  "name": "remote",
                  "type": "boolean",
                  "required": false,
                  "description": "Filter for remote/virtual opportunities."
                },
                {
                  "name": "categories",
                  "type": "array",
                  "required": false,
                  "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT.",
                  "constraints": {
                    "maxItems": 8
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "page",
                  "type": "integer",
                  "required": false,
                  "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100.",
                  "constraints": {
                    "default": 0,
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100.",
                  "constraints": {
                    "default": 20,
                    "minimum": 1,
                    "maximum": 100
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "food bank",
                "lat": 40.7128,
                "lon": -74.006,
                "radiusMiles": 25,
                "categories": [
                  "HUNGER_FOOD_SECURITY"
                ],
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "query": {
                  "type": "string",
                  "description": "Search text."
                },
                "opportunityUrl": {
                  "type": "string",
                  "format": "uri",
                  "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls."
                },
                "lat": {
                  "type": "number",
                  "description": "Lat numeric value for Volunteer Opportunity Search."
                },
                "lon": {
                  "type": "number",
                  "description": "Lon numeric value for Volunteer Opportunity Search."
                },
                "radiusMiles": {
                  "type": "number",
                  "minimum": 1,
                  "maximum": 250,
                  "default": 25,
                  "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250."
                },
                "remote": {
                  "type": "boolean",
                  "description": "Filter for remote/virtual opportunities."
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Categories item value for Volunteer Opportunity Search."
                  },
                  "maxItems": 8,
                  "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT."
                },
                "page": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "default": 0,
                  "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100,
                  "default": 20,
                  "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/volunteer-opportunity-search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/volunteer-opportunity-search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "civic-opportunities",
          "aisle": "Civic Opportunities",
          "shelfId": "civic-opportunities",
          "shelf": "Civic Opportunities",
          "offeringId": "volunteer-opportunity-search",
          "offering": "Volunteer Opportunity Search",
          "pathIds": [
            "public-data",
            "civic-opportunities",
            "civic-opportunities",
            "volunteer-opportunity-search"
          ],
          "pathLabels": [
            "Public Data",
            "Civic Opportunities",
            "Civic Opportunities",
            "Volunteer Opportunity Search"
          ],
          "taxonomyPath": "public-data.civic-opportunities.civic-opportunities.volunteer-opportunity-search",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "civic-opportunities",
              "name": "Civic Opportunities"
            },
            "shelf": {
              "id": "civic-opportunities",
              "name": "Civic Opportunities"
            },
            "offering": {
              "id": "volunteer-opportunity-search",
              "name": "Volunteer Opportunity Search"
            },
            "pathIds": [
              "public-data",
              "civic-opportunities",
              "civic-opportunities",
              "volunteer-opportunity-search"
            ],
            "pathLabels": [
              "Public Data",
              "Civic Opportunities",
              "Civic Opportunities",
              "Volunteer Opportunity Search"
            ]
          }
        },
        "description": {
          "short": "Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.",
          "full": "Purpose: Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nBest use: Use this when an agent needs search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, opportunityUrl, lat, lon, radiusMiles, remote, categories, page, limit, proxiesSx.\n\nAccepted fields:\n- query (optional, string): Search text.\n- opportunityUrl (optional, string): Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls. Constraints: format: uri.\n- lat (optional, number): Lat numeric value for Volunteer Opportunity Search.\n- lon (optional, number): Lon numeric value for Volunteer Opportunity Search.\n- radiusMiles (optional, number): Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250. Constraints: default: 25; min: 1; max: 250.\n- remote (optional, boolean): Filter for remote/virtual opportunities.\n- categories (optional, array): Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT. Constraints: max items: 8.\n- page (optional, integer): Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100. Constraints: default: 0; min: 0; max: 100.\n- limit (optional, integer): Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100. Constraints: default: 20; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"query\": \"food bank\",\n  \"lat\": 40.7128,\n  \"lon\": -74.006,\n  \"radiusMiles\": 25,\n  \"categories\": [\n    \"HUNGER_FOOD_SECURITY\"\n  ],\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Search text."
            },
            "opportunityUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls."
            },
            "lat": {
              "type": "number",
              "description": "Lat numeric value for Volunteer Opportunity Search."
            },
            "lon": {
              "type": "number",
              "description": "Lon numeric value for Volunteer Opportunity Search."
            },
            "radiusMiles": {
              "type": "number",
              "minimum": 1,
              "maximum": 250,
              "default": 25,
              "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250."
            },
            "remote": {
              "type": "boolean",
              "description": "Filter for remote/virtual opportunities."
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Categories item value for Volunteer Opportunity Search."
              },
              "maxItems": 8,
              "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT."
            },
            "page": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100,
              "default": 0,
              "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Search text."
            },
            "opportunityUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls."
            },
            "lat": {
              "type": "number",
              "description": "Lat numeric value for Volunteer Opportunity Search."
            },
            "lon": {
              "type": "number",
              "description": "Lon numeric value for Volunteer Opportunity Search."
            },
            "radiusMiles": {
              "type": "number",
              "minimum": 1,
              "maximum": 250,
              "default": 25,
              "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250."
            },
            "remote": {
              "type": "boolean",
              "description": "Filter for remote/virtual opportunities."
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Categories item value for Volunteer Opportunity Search."
              },
              "maxItems": 8,
              "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT."
            },
            "page": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100,
              "default": 0,
              "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "opportunityUrl",
            "lat",
            "lon",
            "radiusMiles",
            "remote",
            "categories",
            "page",
            "limit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Search text."
            },
            {
              "name": "opportunityUrl",
              "type": "string",
              "required": false,
              "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "lat",
              "type": "number",
              "required": false,
              "description": "Lat numeric value for Volunteer Opportunity Search."
            },
            {
              "name": "lon",
              "type": "number",
              "required": false,
              "description": "Lon numeric value for Volunteer Opportunity Search."
            },
            {
              "name": "radiusMiles",
              "type": "number",
              "required": false,
              "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250.",
              "constraints": {
                "default": 25,
                "minimum": 1,
                "maximum": 250
              }
            },
            {
              "name": "remote",
              "type": "boolean",
              "required": false,
              "description": "Filter for remote/virtual opportunities."
            },
            {
              "name": "categories",
              "type": "array",
              "required": false,
              "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT.",
              "constraints": {
                "maxItems": 8
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "page",
              "type": "integer",
              "required": false,
              "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100.",
              "constraints": {
                "default": 0,
                "minimum": 0,
                "maximum": 100
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100.",
              "constraints": {
                "default": 20,
                "minimum": 1,
                "maximum": 100
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "food bank",
            "lat": 40.7128,
            "lon": -74.006,
            "radiusMiles": 25,
            "categories": [
              "HUNGER_FOOD_SECURITY"
            ],
            "limit": 10
          }
        },
        "exampleRequest": {
          "query": "food bank",
          "lat": 40.7128,
          "lon": -74.006,
          "radiusMiles": 25,
          "categories": [
            "HUNGER_FOOD_SECURITY"
          ],
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "volunteer-opportunity-search",
            "name": "Volunteer Opportunity Search",
            "department": "Public Data"
          },
          "total": 128,
          "results": [
            {
              "id": "abc123",
              "title": "Pack meals for neighbors",
              "organization": "Example Food Bank",
              "location": {
                "city": "New York",
                "state": "NY"
              },
              "remote": false
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/us-weather-forecast",
      "type": "http",
      "x402Version": 2,
      "serviceName": "US Weather Forecast",
      "description": "Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.",
      "longDescription": "Purpose: Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nBest use: Use this when an agent needs return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: lat, lon, zip, city, state, location, includeCurrent, includeHourly, includeAlerts, includeOffice, hourlyLimit, dailyLimit, proxiesSx.\n\nAccepted fields:\n- lat (optional, number): Latitude for a US point. Must be paired with lon. Constraints: min: -90; max: 90.\n- lon (optional, number): Longitude for a US point. Must be paired with lat. Constraints: min: -180; max: 180.\n- zip (optional, string): US ZIP code to geocode before forecast lookup.\n- city (optional, string): US city name. Pair with state for best geocoding.\n- state (optional, string): US state name or two-letter abbreviation for city lookup.\n- location (optional, string): Free-form US place query when lat/lon, zip, or city/state are not supplied.\n- includeCurrent (optional, boolean): Fetch the nearest station's latest observation. Constraints: default: true.\n- includeHourly (optional, boolean): Fetch the hourly forecast. Constraints: default: true.\n- includeAlerts (optional, boolean): Fetch active watches, warnings, and advisories for the point. Constraints: default: true.\n- includeOffice (optional, boolean): Fetch forecast-center metadata such as name, phone, and email when available. Constraints: default: false.\n- hourlyLimit (optional, integer): Maximum hourly periods to return. Constraints: default: 24; min: 1; max: 72.\n- dailyLimit (optional, integer): Maximum multi-day forecast periods to return. Constraints: default: 14; min: 1; max: 14.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"Boulder\",\n  \"state\": \"CO\",\n  \"hourlyLimit\": 24,\n  \"includeAlerts\": true\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "weather",
      "aisle": "Weather",
      "shelfId": "weather",
      "shelf": "Weather",
      "offeringId": "us-weather-forecast",
      "offering": "US Weather Forecast",
      "pathIds": [
        "public-data",
        "weather",
        "weather",
        "us-weather-forecast"
      ],
      "pathLabels": [
        "Public Data",
        "Weather",
        "Weather",
        "US Weather Forecast"
      ],
      "taxonomyPath": "public-data.weather.weather.us-weather-forecast",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "weather",
          "name": "Weather"
        },
        "shelf": {
          "id": "weather",
          "name": "Weather"
        },
        "offering": {
          "id": "us-weather-forecast",
          "name": "US Weather Forecast"
        },
        "pathIds": [
          "public-data",
          "weather",
          "weather",
          "us-weather-forecast"
        ],
        "pathLabels": [
          "Public Data",
          "Weather",
          "Weather",
          "US Weather Forecast"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "weather",
        "forecast",
        "alerts",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "lat": {
            "type": "number",
            "minimum": -90,
            "maximum": 90,
            "description": "Latitude for a US point. Must be paired with lon."
          },
          "lon": {
            "type": "number",
            "minimum": -180,
            "maximum": 180,
            "description": "Longitude for a US point. Must be paired with lat."
          },
          "zip": {
            "type": "string",
            "description": "US ZIP code to geocode before forecast lookup."
          },
          "city": {
            "type": "string",
            "description": "US city name. Pair with state for best geocoding."
          },
          "state": {
            "type": "string",
            "description": "US state name or two-letter abbreviation for city lookup."
          },
          "location": {
            "type": "string",
            "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
          },
          "includeCurrent": {
            "type": "boolean",
            "default": true,
            "description": "Fetch the nearest station's latest observation."
          },
          "includeHourly": {
            "type": "boolean",
            "default": true,
            "description": "Fetch the hourly forecast."
          },
          "includeAlerts": {
            "type": "boolean",
            "default": true,
            "description": "Fetch active watches, warnings, and advisories for the point."
          },
          "includeOffice": {
            "type": "boolean",
            "default": false,
            "description": "Fetch forecast-center metadata such as name, phone, and email when available."
          },
          "hourlyLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 72,
            "default": 24,
            "description": "Maximum hourly periods to return."
          },
          "dailyLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 14,
            "default": 14,
            "description": "Maximum multi-day forecast periods to return."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "lat",
          "lon",
          "zip",
          "city",
          "state",
          "location",
          "includeCurrent",
          "includeHourly",
          "includeAlerts",
          "includeOffice",
          "hourlyLimit",
          "dailyLimit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "lat",
            "type": "number",
            "required": false,
            "description": "Latitude for a US point. Must be paired with lon.",
            "constraints": {
              "minimum": -90,
              "maximum": 90
            }
          },
          {
            "name": "lon",
            "type": "number",
            "required": false,
            "description": "Longitude for a US point. Must be paired with lat.",
            "constraints": {
              "minimum": -180,
              "maximum": 180
            }
          },
          {
            "name": "zip",
            "type": "string",
            "required": false,
            "description": "US ZIP code to geocode before forecast lookup."
          },
          {
            "name": "city",
            "type": "string",
            "required": false,
            "description": "US city name. Pair with state for best geocoding."
          },
          {
            "name": "state",
            "type": "string",
            "required": false,
            "description": "US state name or two-letter abbreviation for city lookup."
          },
          {
            "name": "location",
            "type": "string",
            "required": false,
            "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
          },
          {
            "name": "includeCurrent",
            "type": "boolean",
            "required": false,
            "description": "Fetch the nearest station's latest observation.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeHourly",
            "type": "boolean",
            "required": false,
            "description": "Fetch the hourly forecast.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeAlerts",
            "type": "boolean",
            "required": false,
            "description": "Fetch active watches, warnings, and advisories for the point.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeOffice",
            "type": "boolean",
            "required": false,
            "description": "Fetch forecast-center metadata such as name, phone, and email when available.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "hourlyLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum hourly periods to return.",
            "constraints": {
              "default": 24,
              "minimum": 1,
              "maximum": 72
            }
          },
          {
            "name": "dailyLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum multi-day forecast periods to return.",
            "constraints": {
              "default": 14,
              "minimum": 1,
              "maximum": 14
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "city": "Boulder",
          "state": "CO",
          "hourlyLimit": 24,
          "includeAlerts": true
        }
      },
      "exampleRequest": {
        "city": "Boulder",
        "state": "CO",
        "hourlyLimit": 24,
        "includeAlerts": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "us-weather-forecast",
          "name": "US Weather Forecast",
          "department": "Public Data"
        },
        "location": {
          "input": "Boulder, CO",
          "lat": 40.015,
          "lon": -105.2705,
          "relative_location": {
            "city": "Boulder",
            "state": "CO"
          },
          "time_zone": "America/Denver"
        },
        "grid": {
          "wfo": "BOU",
          "gridX": 54,
          "gridY": 74
        },
        "current_observation": {
          "station_id": "KBDU",
          "text_description": "Mostly Cloudy",
          "temperature_f": 71.6
        },
        "forecast_multi_day": [
          {
            "name": "Tonight",
            "temperature": 54,
            "temperature_unit": "F",
            "short_forecast": "Partly Cloudy"
          }
        ],
        "forecast_hourly": [
          {
            "start_time": "2026-07-03T18:00:00-06:00",
            "temperature": 72,
            "temperature_unit": "F",
            "short_forecast": "Sunny"
          }
        ],
        "alerts": []
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "city": "Boulder",
                "state": "CO",
                "hourlyLimit": 24,
                "includeAlerts": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "us-weather-forecast",
                  "name": "US Weather Forecast",
                  "department": "Public Data"
                },
                "location": {
                  "input": "Boulder, CO",
                  "lat": 40.015,
                  "lon": -105.2705,
                  "relative_location": {
                    "city": "Boulder",
                    "state": "CO"
                  },
                  "time_zone": "America/Denver"
                },
                "grid": {
                  "wfo": "BOU",
                  "gridX": 54,
                  "gridY": 74
                },
                "current_observation": {
                  "station_id": "KBDU",
                  "text_description": "Mostly Cloudy",
                  "temperature_f": 71.6
                },
                "forecast_multi_day": [
                  {
                    "name": "Tonight",
                    "temperature": 54,
                    "temperature_unit": "F",
                    "short_forecast": "Partly Cloudy"
                  }
                ],
                "forecast_hourly": [
                  {
                    "start_time": "2026-07-03T18:00:00-06:00",
                    "temperature": 72,
                    "temperature_unit": "F",
                    "short_forecast": "Sunny"
                  }
                ],
                "alerts": []
              }
            }
          },
          "routeTemplate": "/api/public-data/us-weather-forecast",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "lat": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Latitude for a US point. Must be paired with lon."
                      },
                      "lon": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Longitude for a US point. Must be paired with lat."
                      },
                      "zip": {
                        "type": "string",
                        "description": "US ZIP code to geocode before forecast lookup."
                      },
                      "city": {
                        "type": "string",
                        "description": "US city name. Pair with state for best geocoding."
                      },
                      "state": {
                        "type": "string",
                        "description": "US state name or two-letter abbreviation for city lookup."
                      },
                      "location": {
                        "type": "string",
                        "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
                      },
                      "includeCurrent": {
                        "type": "boolean",
                        "default": true,
                        "description": "Fetch the nearest station's latest observation."
                      },
                      "includeHourly": {
                        "type": "boolean",
                        "default": true,
                        "description": "Fetch the hourly forecast."
                      },
                      "includeAlerts": {
                        "type": "boolean",
                        "default": true,
                        "description": "Fetch active watches, warnings, and advisories for the point."
                      },
                      "includeOffice": {
                        "type": "boolean",
                        "default": false,
                        "description": "Fetch forecast-center metadata such as name, phone, and email when available."
                      },
                      "hourlyLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 72,
                        "default": 24,
                        "description": "Maximum hourly periods to return."
                      },
                      "dailyLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 14,
                        "default": 14,
                        "description": "Maximum multi-day forecast periods to return."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "us-weather-forecast",
            "url": "https://agentbodega.store/api/public-data/us-weather-forecast",
            "method": "POST",
            "description": "Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.",
            "longDescription": "Purpose: Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nBest use: Use this when an agent needs return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: lat, lon, zip, city, state, location, includeCurrent, includeHourly, includeAlerts, includeOffice, hourlyLimit, dailyLimit, proxiesSx.\n\nAccepted fields:\n- lat (optional, number): Latitude for a US point. Must be paired with lon. Constraints: min: -90; max: 90.\n- lon (optional, number): Longitude for a US point. Must be paired with lat. Constraints: min: -180; max: 180.\n- zip (optional, string): US ZIP code to geocode before forecast lookup.\n- city (optional, string): US city name. Pair with state for best geocoding.\n- state (optional, string): US state name or two-letter abbreviation for city lookup.\n- location (optional, string): Free-form US place query when lat/lon, zip, or city/state are not supplied.\n- includeCurrent (optional, boolean): Fetch the nearest station's latest observation. Constraints: default: true.\n- includeHourly (optional, boolean): Fetch the hourly forecast. Constraints: default: true.\n- includeAlerts (optional, boolean): Fetch active watches, warnings, and advisories for the point. Constraints: default: true.\n- includeOffice (optional, boolean): Fetch forecast-center metadata such as name, phone, and email when available. Constraints: default: false.\n- hourlyLimit (optional, integer): Maximum hourly periods to return. Constraints: default: 24; min: 1; max: 72.\n- dailyLimit (optional, integer): Maximum multi-day forecast periods to return. Constraints: default: 14; min: 1; max: 14.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"Boulder\",\n  \"state\": \"CO\",\n  \"hourlyLimit\": 24,\n  \"includeAlerts\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "US Weather Forecast",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "weather",
              "forecast",
              "alerts",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "lat",
                "lon",
                "zip",
                "city",
                "state",
                "location",
                "includeCurrent",
                "includeHourly",
                "includeAlerts",
                "includeOffice",
                "hourlyLimit",
                "dailyLimit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "lat",
                  "type": "number",
                  "required": false,
                  "description": "Latitude for a US point. Must be paired with lon.",
                  "constraints": {
                    "minimum": -90,
                    "maximum": 90
                  }
                },
                {
                  "name": "lon",
                  "type": "number",
                  "required": false,
                  "description": "Longitude for a US point. Must be paired with lat.",
                  "constraints": {
                    "minimum": -180,
                    "maximum": 180
                  }
                },
                {
                  "name": "zip",
                  "type": "string",
                  "required": false,
                  "description": "US ZIP code to geocode before forecast lookup."
                },
                {
                  "name": "city",
                  "type": "string",
                  "required": false,
                  "description": "US city name. Pair with state for best geocoding."
                },
                {
                  "name": "state",
                  "type": "string",
                  "required": false,
                  "description": "US state name or two-letter abbreviation for city lookup."
                },
                {
                  "name": "location",
                  "type": "string",
                  "required": false,
                  "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
                },
                {
                  "name": "includeCurrent",
                  "type": "boolean",
                  "required": false,
                  "description": "Fetch the nearest station's latest observation.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeHourly",
                  "type": "boolean",
                  "required": false,
                  "description": "Fetch the hourly forecast.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeAlerts",
                  "type": "boolean",
                  "required": false,
                  "description": "Fetch active watches, warnings, and advisories for the point.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeOffice",
                  "type": "boolean",
                  "required": false,
                  "description": "Fetch forecast-center metadata such as name, phone, and email when available.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "hourlyLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum hourly periods to return.",
                  "constraints": {
                    "default": 24,
                    "minimum": 1,
                    "maximum": 72
                  }
                },
                {
                  "name": "dailyLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum multi-day forecast periods to return.",
                  "constraints": {
                    "default": 14,
                    "minimum": 1,
                    "maximum": 14
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "city": "Boulder",
                "state": "CO",
                "hourlyLimit": 24,
                "includeAlerts": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "lat": {
                  "type": "number",
                  "minimum": -90,
                  "maximum": 90,
                  "description": "Latitude for a US point. Must be paired with lon."
                },
                "lon": {
                  "type": "number",
                  "minimum": -180,
                  "maximum": 180,
                  "description": "Longitude for a US point. Must be paired with lat."
                },
                "zip": {
                  "type": "string",
                  "description": "US ZIP code to geocode before forecast lookup."
                },
                "city": {
                  "type": "string",
                  "description": "US city name. Pair with state for best geocoding."
                },
                "state": {
                  "type": "string",
                  "description": "US state name or two-letter abbreviation for city lookup."
                },
                "location": {
                  "type": "string",
                  "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
                },
                "includeCurrent": {
                  "type": "boolean",
                  "default": true,
                  "description": "Fetch the nearest station's latest observation."
                },
                "includeHourly": {
                  "type": "boolean",
                  "default": true,
                  "description": "Fetch the hourly forecast."
                },
                "includeAlerts": {
                  "type": "boolean",
                  "default": true,
                  "description": "Fetch active watches, warnings, and advisories for the point."
                },
                "includeOffice": {
                  "type": "boolean",
                  "default": false,
                  "description": "Fetch forecast-center metadata such as name, phone, and email when available."
                },
                "hourlyLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 72,
                  "default": 24,
                  "description": "Maximum hourly periods to return."
                },
                "dailyLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 14,
                  "default": 14,
                  "description": "Maximum multi-day forecast periods to return."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/us-weather-forecast",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/us-weather-forecast",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "weather",
          "aisle": "Weather",
          "shelfId": "weather",
          "shelf": "Weather",
          "offeringId": "us-weather-forecast",
          "offering": "US Weather Forecast",
          "pathIds": [
            "public-data",
            "weather",
            "weather",
            "us-weather-forecast"
          ],
          "pathLabels": [
            "Public Data",
            "Weather",
            "Weather",
            "US Weather Forecast"
          ],
          "taxonomyPath": "public-data.weather.weather.us-weather-forecast",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "weather",
              "name": "Weather"
            },
            "shelf": {
              "id": "weather",
              "name": "Weather"
            },
            "offering": {
              "id": "us-weather-forecast",
              "name": "US Weather Forecast"
            },
            "pathIds": [
              "public-data",
              "weather",
              "weather",
              "us-weather-forecast"
            ],
            "pathLabels": [
              "Public Data",
              "Weather",
              "Weather",
              "US Weather Forecast"
            ]
          }
        },
        "description": {
          "short": "Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.",
          "full": "Purpose: Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nBest use: Use this when an agent needs return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: lat, lon, zip, city, state, location, includeCurrent, includeHourly, includeAlerts, includeOffice, hourlyLimit, dailyLimit, proxiesSx.\n\nAccepted fields:\n- lat (optional, number): Latitude for a US point. Must be paired with lon. Constraints: min: -90; max: 90.\n- lon (optional, number): Longitude for a US point. Must be paired with lat. Constraints: min: -180; max: 180.\n- zip (optional, string): US ZIP code to geocode before forecast lookup.\n- city (optional, string): US city name. Pair with state for best geocoding.\n- state (optional, string): US state name or two-letter abbreviation for city lookup.\n- location (optional, string): Free-form US place query when lat/lon, zip, or city/state are not supplied.\n- includeCurrent (optional, boolean): Fetch the nearest station's latest observation. Constraints: default: true.\n- includeHourly (optional, boolean): Fetch the hourly forecast. Constraints: default: true.\n- includeAlerts (optional, boolean): Fetch active watches, warnings, and advisories for the point. Constraints: default: true.\n- includeOffice (optional, boolean): Fetch forecast-center metadata such as name, phone, and email when available. Constraints: default: false.\n- hourlyLimit (optional, integer): Maximum hourly periods to return. Constraints: default: 24; min: 1; max: 72.\n- dailyLimit (optional, integer): Maximum multi-day forecast periods to return. Constraints: default: 14; min: 1; max: 14.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"Boulder\",\n  \"state\": \"CO\",\n  \"hourlyLimit\": 24,\n  \"includeAlerts\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "lat": {
              "type": "number",
              "minimum": -90,
              "maximum": 90,
              "description": "Latitude for a US point. Must be paired with lon."
            },
            "lon": {
              "type": "number",
              "minimum": -180,
              "maximum": 180,
              "description": "Longitude for a US point. Must be paired with lat."
            },
            "zip": {
              "type": "string",
              "description": "US ZIP code to geocode before forecast lookup."
            },
            "city": {
              "type": "string",
              "description": "US city name. Pair with state for best geocoding."
            },
            "state": {
              "type": "string",
              "description": "US state name or two-letter abbreviation for city lookup."
            },
            "location": {
              "type": "string",
              "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
            },
            "includeCurrent": {
              "type": "boolean",
              "default": true,
              "description": "Fetch the nearest station's latest observation."
            },
            "includeHourly": {
              "type": "boolean",
              "default": true,
              "description": "Fetch the hourly forecast."
            },
            "includeAlerts": {
              "type": "boolean",
              "default": true,
              "description": "Fetch active watches, warnings, and advisories for the point."
            },
            "includeOffice": {
              "type": "boolean",
              "default": false,
              "description": "Fetch forecast-center metadata such as name, phone, and email when available."
            },
            "hourlyLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 72,
              "default": 24,
              "description": "Maximum hourly periods to return."
            },
            "dailyLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 14,
              "default": 14,
              "description": "Maximum multi-day forecast periods to return."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "lat": {
              "type": "number",
              "minimum": -90,
              "maximum": 90,
              "description": "Latitude for a US point. Must be paired with lon."
            },
            "lon": {
              "type": "number",
              "minimum": -180,
              "maximum": 180,
              "description": "Longitude for a US point. Must be paired with lat."
            },
            "zip": {
              "type": "string",
              "description": "US ZIP code to geocode before forecast lookup."
            },
            "city": {
              "type": "string",
              "description": "US city name. Pair with state for best geocoding."
            },
            "state": {
              "type": "string",
              "description": "US state name or two-letter abbreviation for city lookup."
            },
            "location": {
              "type": "string",
              "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
            },
            "includeCurrent": {
              "type": "boolean",
              "default": true,
              "description": "Fetch the nearest station's latest observation."
            },
            "includeHourly": {
              "type": "boolean",
              "default": true,
              "description": "Fetch the hourly forecast."
            },
            "includeAlerts": {
              "type": "boolean",
              "default": true,
              "description": "Fetch active watches, warnings, and advisories for the point."
            },
            "includeOffice": {
              "type": "boolean",
              "default": false,
              "description": "Fetch forecast-center metadata such as name, phone, and email when available."
            },
            "hourlyLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 72,
              "default": 24,
              "description": "Maximum hourly periods to return."
            },
            "dailyLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 14,
              "default": 14,
              "description": "Maximum multi-day forecast periods to return."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "lat",
            "lon",
            "zip",
            "city",
            "state",
            "location",
            "includeCurrent",
            "includeHourly",
            "includeAlerts",
            "includeOffice",
            "hourlyLimit",
            "dailyLimit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "lat",
              "type": "number",
              "required": false,
              "description": "Latitude for a US point. Must be paired with lon.",
              "constraints": {
                "minimum": -90,
                "maximum": 90
              }
            },
            {
              "name": "lon",
              "type": "number",
              "required": false,
              "description": "Longitude for a US point. Must be paired with lat.",
              "constraints": {
                "minimum": -180,
                "maximum": 180
              }
            },
            {
              "name": "zip",
              "type": "string",
              "required": false,
              "description": "US ZIP code to geocode before forecast lookup."
            },
            {
              "name": "city",
              "type": "string",
              "required": false,
              "description": "US city name. Pair with state for best geocoding."
            },
            {
              "name": "state",
              "type": "string",
              "required": false,
              "description": "US state name or two-letter abbreviation for city lookup."
            },
            {
              "name": "location",
              "type": "string",
              "required": false,
              "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
            },
            {
              "name": "includeCurrent",
              "type": "boolean",
              "required": false,
              "description": "Fetch the nearest station's latest observation.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeHourly",
              "type": "boolean",
              "required": false,
              "description": "Fetch the hourly forecast.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeAlerts",
              "type": "boolean",
              "required": false,
              "description": "Fetch active watches, warnings, and advisories for the point.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeOffice",
              "type": "boolean",
              "required": false,
              "description": "Fetch forecast-center metadata such as name, phone, and email when available.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "hourlyLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum hourly periods to return.",
              "constraints": {
                "default": 24,
                "minimum": 1,
                "maximum": 72
              }
            },
            {
              "name": "dailyLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum multi-day forecast periods to return.",
              "constraints": {
                "default": 14,
                "minimum": 1,
                "maximum": 14
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "city": "Boulder",
            "state": "CO",
            "hourlyLimit": 24,
            "includeAlerts": true
          }
        },
        "exampleRequest": {
          "city": "Boulder",
          "state": "CO",
          "hourlyLimit": 24,
          "includeAlerts": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "us-weather-forecast",
            "name": "US Weather Forecast",
            "department": "Public Data"
          },
          "location": {
            "input": "Boulder, CO",
            "lat": 40.015,
            "lon": -105.2705,
            "relative_location": {
              "city": "Boulder",
              "state": "CO"
            },
            "time_zone": "America/Denver"
          },
          "grid": {
            "wfo": "BOU",
            "gridX": 54,
            "gridY": 74
          },
          "current_observation": {
            "station_id": "KBDU",
            "text_description": "Mostly Cloudy",
            "temperature_f": 71.6
          },
          "forecast_multi_day": [
            {
              "name": "Tonight",
              "temperature": 54,
              "temperature_unit": "F",
              "short_forecast": "Partly Cloudy"
            }
          ],
          "forecast_hourly": [
            {
              "start_time": "2026-07-03T18:00:00-06:00",
              "temperature": 72,
              "temperature_unit": "F",
              "short_forecast": "Sunny"
            }
          ],
          "alerts": []
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/check",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Official Service Status Check",
      "description": "Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.",
      "longDescription": "Purpose: Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nBest use: Use this when an agent needs check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: service.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- service (required, string): Service id from /api/status/catalog, for example github or gitlab.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Official Service Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"service\": \"github\",\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "utility",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "status-checks",
      "aisle": "Status Checks",
      "offeringId": "official-status-check",
      "offering": "Official Service Status Check",
      "pathIds": [
        "official-status",
        "status-checks",
        "official-status-check"
      ],
      "pathLabels": [
        "Status & Infra",
        "Status Checks",
        "Official Service Status Check"
      ],
      "taxonomyPath": "official-status.status-checks.official-status-check",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "status-checks",
          "name": "Status Checks"
        },
        "offering": {
          "id": "official-status-check",
          "name": "Official Service Status Check"
        },
        "pathIds": [
          "official-status",
          "status-checks",
          "official-status-check"
        ],
        "pathLabels": [
          "Status & Infra",
          "Status Checks",
          "Official Service Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "github",
        "gitlab",
        "deploy-readiness",
        "incident-response",
        "agent-tools"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "service"
        ],
        "properties": {
          "service": {
            "type": "string",
            "description": "Service id from /api/status/catalog, for example github or gitlab."
          },
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Official Service Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "service"
        ],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "service",
            "type": "string",
            "required": true,
            "description": "Service id from /api/status/catalog, for example github or gitlab."
          },
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "service": "github",
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "service": "github",
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "id": "github",
          "name": "GitHub"
        },
        "ok": true,
        "status": "operational",
        "label": "All Systems Operational",
        "source": {
          "type": "managed-status-source",
          "cached": false,
          "stale": false
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "service": "github",
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "id": "github",
                  "name": "GitHub"
                },
                "ok": true,
                "status": "operational",
                "label": "All Systems Operational",
                "source": {
                  "type": "managed-status-source",
                  "cached": false,
                  "stale": false
                }
              }
            }
          },
          "routeTemplate": "/api/status/check",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "service"
                    ],
                    "properties": {
                      "service": {
                        "type": "string",
                        "description": "Service id from /api/status/catalog, for example github or gitlab."
                      },
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Official Service Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-check",
            "url": "https://agentbodega.store/api/status/check",
            "method": "POST",
            "description": "Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.",
            "longDescription": "Purpose: Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nBest use: Use this when an agent needs check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: service.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- service (required, string): Service id from /api/status/catalog, for example github or gitlab.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Official Service Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"service\": \"github\",\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Official Service Status Check",
            "category": "official-status",
            "kind": "utility",
            "tags": [
              "status",
              "github",
              "gitlab",
              "deploy-readiness",
              "incident-response",
              "agent-tools"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "service"
              ],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "service",
                  "type": "string",
                  "required": true,
                  "description": "Service id from /api/status/catalog, for example github or gitlab."
                },
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "service": "github",
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "service"
              ],
              "properties": {
                "service": {
                  "type": "string",
                  "description": "Service id from /api/status/catalog, for example github or gitlab."
                },
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Official Service Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/check",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/check",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "status-checks",
          "aisle": "Status Checks",
          "offeringId": "official-status-check",
          "offering": "Official Service Status Check",
          "pathIds": [
            "official-status",
            "status-checks",
            "official-status-check"
          ],
          "pathLabels": [
            "Status & Infra",
            "Status Checks",
            "Official Service Status Check"
          ],
          "taxonomyPath": "official-status.status-checks.official-status-check",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "status-checks",
              "name": "Status Checks"
            },
            "offering": {
              "id": "official-status-check",
              "name": "Official Service Status Check"
            },
            "pathIds": [
              "official-status",
              "status-checks",
              "official-status-check"
            ],
            "pathLabels": [
              "Status & Infra",
              "Status Checks",
              "Official Service Status Check"
            ]
          }
        },
        "description": {
          "short": "Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.",
          "full": "Purpose: Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nBest use: Use this when an agent needs check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: service.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- service (required, string): Service id from /api/status/catalog, for example github or gitlab.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Official Service Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"service\": \"github\",\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "service"
          ],
          "properties": {
            "service": {
              "type": "string",
              "description": "Service id from /api/status/catalog, for example github or gitlab."
            },
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Official Service Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "service"
          ],
          "properties": {
            "service": {
              "type": "string",
              "description": "Service id from /api/status/catalog, for example github or gitlab."
            },
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Official Service Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "service"
          ],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "service",
              "type": "string",
              "required": true,
              "description": "Service id from /api/status/catalog, for example github or gitlab."
            },
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "service": "github",
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "service": "github",
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "id": "github",
            "name": "GitHub"
          },
          "ok": true,
          "status": "operational",
          "label": "All Systems Operational",
          "source": {
            "type": "managed-status-source",
            "cached": false,
            "stale": false
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/cloud/status/check",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cloud Provider Status Check",
      "description": "Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.",
      "longDescription": "Purpose: Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nBest use: Use this when an agent needs check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: provider.\nOptional fields: service, product, region, location, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (required, string): Cloud provider id. Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\".\n- service (optional, string): Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke.\n- product (optional, string): GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine.\n- region (optional, string): Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global.\n- location (optional, string): Provider location alias. Treated the same as region.\n- includeHistory (optional, boolean): Return recent/resolved historical incidents when the provider source exposes them. Constraints: default: false.\n- includeHealthy (optional, boolean): Include healthy/noisy rows. Default responses focus on degraded or relevant incidents. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"aws\",\n  \"service\": \"lambda\",\n  \"region\": \"us-east-1\",\n  \"includeHistory\": false\n}\n```",
      "category": "cloud-status",
      "kind": "utility",
      "departmentId": "cloud-status",
      "department": "Cloud Status",
      "aisleId": "provider-status",
      "aisle": "Provider Status",
      "shelfId": "single-unit",
      "shelf": "Single Unit",
      "offeringId": "cloud-status-check",
      "offering": "Cloud Provider Status Check",
      "pathIds": [
        "cloud-status",
        "provider-status",
        "single-unit",
        "cloud-status-check"
      ],
      "pathLabels": [
        "Cloud Status",
        "Provider Status",
        "Single Unit",
        "Cloud Provider Status Check"
      ],
      "taxonomyPath": "cloud-status.provider-status.single-unit.cloud-status-check",
      "layout": {
        "department": {
          "id": "cloud-status",
          "name": "Cloud Status"
        },
        "aisle": {
          "id": "provider-status",
          "name": "Provider Status"
        },
        "shelf": {
          "id": "single-unit",
          "name": "Single Unit"
        },
        "offering": {
          "id": "cloud-status-check",
          "name": "Cloud Provider Status Check"
        },
        "pathIds": [
          "cloud-status",
          "provider-status",
          "single-unit",
          "cloud-status-check"
        ],
        "pathLabels": [
          "Cloud Status",
          "Provider Status",
          "Single Unit",
          "Cloud Provider Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cloud",
        "aws",
        "gcp",
        "azure",
        "digitalocean",
        "linode",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "provider"
        ],
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode"
            ],
            "description": "Cloud provider id."
          },
          "service": {
            "type": "string",
            "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
          },
          "product": {
            "type": "string",
            "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
          },
          "region": {
            "type": "string",
            "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
          },
          "location": {
            "type": "string",
            "description": "Provider location alias. Treated the same as region."
          },
          "includeHistory": {
            "type": "boolean",
            "default": false,
            "description": "Return recent/resolved historical incidents when the provider source exposes them."
          },
          "includeHealthy": {
            "type": "boolean",
            "default": false,
            "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "provider"
        ],
        "optional": [
          "service",
          "product",
          "region",
          "location",
          "includeHistory",
          "includeHealthy",
          "incidentLimit"
        ],
        "fields": [
          {
            "name": "provider",
            "type": "string",
            "required": true,
            "description": "Cloud provider id.",
            "constraints": {
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode"
              ]
            }
          },
          {
            "name": "service",
            "type": "string",
            "required": false,
            "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
          },
          {
            "name": "product",
            "type": "string",
            "required": false,
            "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
          },
          {
            "name": "region",
            "type": "string",
            "required": false,
            "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
          },
          {
            "name": "location",
            "type": "string",
            "required": false,
            "description": "Provider location alias. Treated the same as region."
          },
          {
            "name": "includeHistory",
            "type": "boolean",
            "required": false,
            "description": "Return recent/resolved historical incidents when the provider source exposes them.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "includeHealthy",
            "type": "boolean",
            "required": false,
            "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "provider": "aws",
          "service": "lambda",
          "region": "us-east-1",
          "includeHistory": false
        }
      },
      "exampleRequest": {
        "provider": "aws",
        "service": "lambda",
        "region": "us-east-1",
        "includeHistory": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "provider": {
          "id": "aws",
          "name": "AWS"
        },
        "status": "operational",
        "summary": "No broad-impact incident matched the requested unit.",
        "incidents": []
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "provider": "aws",
                "service": "lambda",
                "region": "us-east-1",
                "includeHistory": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "provider": {
                  "id": "aws",
                  "name": "AWS"
                },
                "status": "operational",
                "summary": "No broad-impact incident matched the requested unit.",
                "incidents": []
              }
            }
          },
          "routeTemplate": "/api/cloud/status/check",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "provider"
                    ],
                    "properties": {
                      "provider": {
                        "type": "string",
                        "enum": [
                          "aws",
                          "gcp",
                          "azure",
                          "digitalocean",
                          "linode"
                        ],
                        "description": "Cloud provider id."
                      },
                      "service": {
                        "type": "string",
                        "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                      },
                      "product": {
                        "type": "string",
                        "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                      },
                      "region": {
                        "type": "string",
                        "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                      },
                      "location": {
                        "type": "string",
                        "description": "Provider location alias. Treated the same as region."
                      },
                      "includeHistory": {
                        "type": "boolean",
                        "default": false,
                        "description": "Return recent/resolved historical incidents when the provider source exposes them."
                      },
                      "includeHealthy": {
                        "type": "boolean",
                        "default": false,
                        "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "cloud-status-check",
            "url": "https://agentbodega.store/api/cloud/status/check",
            "method": "POST",
            "description": "Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.",
            "longDescription": "Purpose: Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nBest use: Use this when an agent needs check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: provider.\nOptional fields: service, product, region, location, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (required, string): Cloud provider id. Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\".\n- service (optional, string): Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke.\n- product (optional, string): GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine.\n- region (optional, string): Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global.\n- location (optional, string): Provider location alias. Treated the same as region.\n- includeHistory (optional, boolean): Return recent/resolved historical incidents when the provider source exposes them. Constraints: default: false.\n- includeHealthy (optional, boolean): Include healthy/noisy rows. Default responses focus on degraded or relevant incidents. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"aws\",\n  \"service\": \"lambda\",\n  \"region\": \"us-east-1\",\n  \"includeHistory\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cloud Provider Status Check",
            "category": "cloud-status",
            "kind": "utility",
            "tags": [
              "status",
              "cloud",
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "provider"
              ],
              "optional": [
                "service",
                "product",
                "region",
                "location",
                "includeHistory",
                "includeHealthy",
                "incidentLimit"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "string",
                  "required": true,
                  "description": "Cloud provider id.",
                  "constraints": {
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ]
                  }
                },
                {
                  "name": "service",
                  "type": "string",
                  "required": false,
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                {
                  "name": "product",
                  "type": "string",
                  "required": false,
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                {
                  "name": "region",
                  "type": "string",
                  "required": false,
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                {
                  "name": "location",
                  "type": "string",
                  "required": false,
                  "description": "Provider location alias. Treated the same as region."
                },
                {
                  "name": "includeHistory",
                  "type": "boolean",
                  "required": false,
                  "description": "Return recent/resolved historical incidents when the provider source exposes them.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "includeHealthy",
                  "type": "boolean",
                  "required": false,
                  "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "provider": "aws",
                "service": "lambda",
                "region": "us-east-1",
                "includeHistory": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "provider"
              ],
              "properties": {
                "provider": {
                  "type": "string",
                  "enum": [
                    "aws",
                    "gcp",
                    "azure",
                    "digitalocean",
                    "linode"
                  ],
                  "description": "Cloud provider id."
                },
                "service": {
                  "type": "string",
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                "product": {
                  "type": "string",
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                "region": {
                  "type": "string",
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                "location": {
                  "type": "string",
                  "description": "Provider location alias. Treated the same as region."
                },
                "includeHistory": {
                  "type": "boolean",
                  "default": false,
                  "description": "Return recent/resolved historical incidents when the provider source exposes them."
                },
                "includeHealthy": {
                  "type": "boolean",
                  "default": false,
                  "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/cloud/status/check",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/cloud/status/check",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "cloud-status",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "cloud-status",
          "department": "Cloud Status",
          "aisleId": "provider-status",
          "aisle": "Provider Status",
          "shelfId": "single-unit",
          "shelf": "Single Unit",
          "offeringId": "cloud-status-check",
          "offering": "Cloud Provider Status Check",
          "pathIds": [
            "cloud-status",
            "provider-status",
            "single-unit",
            "cloud-status-check"
          ],
          "pathLabels": [
            "Cloud Status",
            "Provider Status",
            "Single Unit",
            "Cloud Provider Status Check"
          ],
          "taxonomyPath": "cloud-status.provider-status.single-unit.cloud-status-check",
          "layout": {
            "department": {
              "id": "cloud-status",
              "name": "Cloud Status"
            },
            "aisle": {
              "id": "provider-status",
              "name": "Provider Status"
            },
            "shelf": {
              "id": "single-unit",
              "name": "Single Unit"
            },
            "offering": {
              "id": "cloud-status-check",
              "name": "Cloud Provider Status Check"
            },
            "pathIds": [
              "cloud-status",
              "provider-status",
              "single-unit",
              "cloud-status-check"
            ],
            "pathLabels": [
              "Cloud Status",
              "Provider Status",
              "Single Unit",
              "Cloud Provider Status Check"
            ]
          }
        },
        "description": {
          "short": "Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.",
          "full": "Purpose: Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nBest use: Use this when an agent needs check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: provider.\nOptional fields: service, product, region, location, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (required, string): Cloud provider id. Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\".\n- service (optional, string): Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke.\n- product (optional, string): GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine.\n- region (optional, string): Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global.\n- location (optional, string): Provider location alias. Treated the same as region.\n- includeHistory (optional, boolean): Return recent/resolved historical incidents when the provider source exposes them. Constraints: default: false.\n- includeHealthy (optional, boolean): Include healthy/noisy rows. Default responses focus on degraded or relevant incidents. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"aws\",\n  \"service\": \"lambda\",\n  \"region\": \"us-east-1\",\n  \"includeHistory\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "provider"
          ],
          "properties": {
            "provider": {
              "type": "string",
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode"
              ],
              "description": "Cloud provider id."
            },
            "service": {
              "type": "string",
              "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
            },
            "product": {
              "type": "string",
              "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
            },
            "region": {
              "type": "string",
              "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
            },
            "location": {
              "type": "string",
              "description": "Provider location alias. Treated the same as region."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Return recent/resolved historical incidents when the provider source exposes them."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "provider"
          ],
          "properties": {
            "provider": {
              "type": "string",
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode"
              ],
              "description": "Cloud provider id."
            },
            "service": {
              "type": "string",
              "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
            },
            "product": {
              "type": "string",
              "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
            },
            "region": {
              "type": "string",
              "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
            },
            "location": {
              "type": "string",
              "description": "Provider location alias. Treated the same as region."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Return recent/resolved historical incidents when the provider source exposes them."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "provider"
          ],
          "optional": [
            "service",
            "product",
            "region",
            "location",
            "includeHistory",
            "includeHealthy",
            "incidentLimit"
          ],
          "fields": [
            {
              "name": "provider",
              "type": "string",
              "required": true,
              "description": "Cloud provider id.",
              "constraints": {
                "enum": [
                  "aws",
                  "gcp",
                  "azure",
                  "digitalocean",
                  "linode"
                ]
              }
            },
            {
              "name": "service",
              "type": "string",
              "required": false,
              "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
            },
            {
              "name": "product",
              "type": "string",
              "required": false,
              "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
            },
            {
              "name": "region",
              "type": "string",
              "required": false,
              "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
            },
            {
              "name": "location",
              "type": "string",
              "required": false,
              "description": "Provider location alias. Treated the same as region."
            },
            {
              "name": "includeHistory",
              "type": "boolean",
              "required": false,
              "description": "Return recent/resolved historical incidents when the provider source exposes them.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "includeHealthy",
              "type": "boolean",
              "required": false,
              "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "provider": "aws",
            "service": "lambda",
            "region": "us-east-1",
            "includeHistory": false
          }
        },
        "exampleRequest": {
          "provider": "aws",
          "service": "lambda",
          "region": "us-east-1",
          "includeHistory": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "provider": {
            "id": "aws",
            "name": "AWS"
          },
          "status": "operational",
          "summary": "No broad-impact incident matched the requested unit.",
          "incidents": []
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/cloud/status/summary",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cloud Provider Status Summary",
      "description": "Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.",
      "longDescription": "Purpose: Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nBest use: Use this when an agent needs summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: provider, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (optional, string): Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"all\",\n  \"includeHistory\": false\n}\n```",
      "category": "cloud-status",
      "kind": "http-json",
      "departmentId": "cloud-status",
      "department": "Cloud Status",
      "aisleId": "incident-summaries",
      "aisle": "Incident Summaries",
      "shelfId": "single-unit",
      "shelf": "Single Unit",
      "offeringId": "cloud-status-summary",
      "offering": "Cloud Provider Status Summary",
      "pathIds": [
        "cloud-status",
        "incident-summaries",
        "single-unit",
        "cloud-status-summary"
      ],
      "pathLabels": [
        "Cloud Status",
        "Incident Summaries",
        "Single Unit",
        "Cloud Provider Status Summary"
      ],
      "taxonomyPath": "cloud-status.incident-summaries.single-unit.cloud-status-summary",
      "layout": {
        "department": {
          "id": "cloud-status",
          "name": "Cloud Status"
        },
        "aisle": {
          "id": "incident-summaries",
          "name": "Incident Summaries"
        },
        "shelf": {
          "id": "single-unit",
          "name": "Single Unit"
        },
        "offering": {
          "id": "cloud-status-summary",
          "name": "Cloud Provider Status Summary"
        },
        "pathIds": [
          "cloud-status",
          "incident-summaries",
          "single-unit",
          "cloud-status-summary"
        ],
        "pathLabels": [
          "Cloud Status",
          "Incident Summaries",
          "Single Unit",
          "Cloud Provider Status Summary"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cloud",
        "summary",
        "aws",
        "gcp",
        "azure",
        "digitalocean",
        "linode",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode",
              "all"
            ],
            "default": "all",
            "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\"."
          },
          "includeHistory": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false."
          },
          "includeHealthy": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "provider",
          "includeHistory",
          "includeHealthy",
          "incidentLimit"
        ],
        "fields": [
          {
            "name": "provider",
            "type": "string",
            "required": false,
            "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".",
            "constraints": {
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode",
                "all"
              ],
              "default": "all"
            }
          },
          {
            "name": "includeHistory",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "includeHealthy",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "provider": "all",
          "includeHistory": false
        }
      },
      "exampleRequest": {
        "provider": "all",
        "includeHistory": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "provider": "all",
        "summary": {
          "worstStatus": "operational",
          "checkedProviders": 5
        },
        "incidents": []
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "provider": "all",
                "includeHistory": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "provider": "all",
                "summary": {
                  "worstStatus": "operational",
                  "checkedProviders": 5
                },
                "incidents": []
              }
            }
          },
          "routeTemplate": "/api/cloud/status/summary",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "provider": {
                        "type": "string",
                        "enum": [
                          "aws",
                          "gcp",
                          "azure",
                          "digitalocean",
                          "linode",
                          "all"
                        ],
                        "default": "all",
                        "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\"."
                      },
                      "includeHistory": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false."
                      },
                      "includeHealthy": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "cloud-status-summary",
            "url": "https://agentbodega.store/api/cloud/status/summary",
            "method": "POST",
            "description": "Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.",
            "longDescription": "Purpose: Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nBest use: Use this when an agent needs summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: provider, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (optional, string): Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"all\",\n  \"includeHistory\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cloud Provider Status Summary",
            "category": "cloud-status",
            "kind": "http-json",
            "tags": [
              "status",
              "cloud",
              "summary",
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "provider",
                "includeHistory",
                "includeHealthy",
                "incidentLimit"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "string",
                  "required": false,
                  "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".",
                  "constraints": {
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode",
                      "all"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "includeHistory",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "includeHealthy",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "provider": "all",
                "includeHistory": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "provider": {
                  "type": "string",
                  "enum": [
                    "aws",
                    "gcp",
                    "azure",
                    "digitalocean",
                    "linode",
                    "all"
                  ],
                  "default": "all",
                  "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\"."
                },
                "includeHistory": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false."
                },
                "includeHealthy": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/cloud/status/summary",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/cloud/status/summary",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "cloud-status",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "cloud-status",
          "department": "Cloud Status",
          "aisleId": "incident-summaries",
          "aisle": "Incident Summaries",
          "shelfId": "single-unit",
          "shelf": "Single Unit",
          "offeringId": "cloud-status-summary",
          "offering": "Cloud Provider Status Summary",
          "pathIds": [
            "cloud-status",
            "incident-summaries",
            "single-unit",
            "cloud-status-summary"
          ],
          "pathLabels": [
            "Cloud Status",
            "Incident Summaries",
            "Single Unit",
            "Cloud Provider Status Summary"
          ],
          "taxonomyPath": "cloud-status.incident-summaries.single-unit.cloud-status-summary",
          "layout": {
            "department": {
              "id": "cloud-status",
              "name": "Cloud Status"
            },
            "aisle": {
              "id": "incident-summaries",
              "name": "Incident Summaries"
            },
            "shelf": {
              "id": "single-unit",
              "name": "Single Unit"
            },
            "offering": {
              "id": "cloud-status-summary",
              "name": "Cloud Provider Status Summary"
            },
            "pathIds": [
              "cloud-status",
              "incident-summaries",
              "single-unit",
              "cloud-status-summary"
            ],
            "pathLabels": [
              "Cloud Status",
              "Incident Summaries",
              "Single Unit",
              "Cloud Provider Status Summary"
            ]
          }
        },
        "description": {
          "short": "Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.",
          "full": "Purpose: Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nBest use: Use this when an agent needs summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: provider, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (optional, string): Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"all\",\n  \"includeHistory\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "provider": {
              "type": "string",
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode",
                "all"
              ],
              "default": "all",
              "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\"."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "provider": {
              "type": "string",
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode",
                "all"
              ],
              "default": "all",
              "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\"."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "provider",
            "includeHistory",
            "includeHealthy",
            "incidentLimit"
          ],
          "fields": [
            {
              "name": "provider",
              "type": "string",
              "required": false,
              "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".",
              "constraints": {
                "enum": [
                  "aws",
                  "gcp",
                  "azure",
                  "digitalocean",
                  "linode",
                  "all"
                ],
                "default": "all"
              }
            },
            {
              "name": "includeHistory",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "includeHealthy",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "provider": "all",
            "includeHistory": false
          }
        },
        "exampleRequest": {
          "provider": "all",
          "includeHistory": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "provider": "all",
          "summary": {
            "worstStatus": "operational",
            "checkedProviders": 5
          },
          "incidents": []
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/cloud/status/bundle",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cloud Status Small Bundle",
      "description": "Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.",
      "longDescription": "Purpose: Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nBest use: Use this when an agent needs check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, targets, includeHistory, includeHealthy.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".\n- targets (optional, array): Optional explicit cloud checks. Bundle price covers up to five normalized units. Constraints: min items: 1; max items: 5. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"cloud-core\",\n  \"includeHistory\": false\n}\n```",
      "category": "cloud-status",
      "kind": "utility",
      "departmentId": "cloud-status",
      "department": "Cloud Status",
      "aisleId": "cloud-bundles",
      "aisle": "Cloud Bundles",
      "shelfId": "multi-unit",
      "shelf": "Multi Unit",
      "offeringId": "cloud-status-bundle",
      "offering": "Cloud Status Small Bundle",
      "pathIds": [
        "cloud-status",
        "cloud-bundles",
        "multi-unit",
        "cloud-status-bundle"
      ],
      "pathLabels": [
        "Cloud Status",
        "Cloud Bundles",
        "Multi Unit",
        "Cloud Status Small Bundle"
      ],
      "taxonomyPath": "cloud-status.cloud-bundles.multi-unit.cloud-status-bundle",
      "layout": {
        "department": {
          "id": "cloud-status",
          "name": "Cloud Status"
        },
        "aisle": {
          "id": "cloud-bundles",
          "name": "Cloud Bundles"
        },
        "shelf": {
          "id": "multi-unit",
          "name": "Multi Unit"
        },
        "offering": {
          "id": "cloud-status-bundle",
          "name": "Cloud Status Small Bundle"
        },
        "pathIds": [
          "cloud-status",
          "cloud-bundles",
          "multi-unit",
          "cloud-status-bundle"
        ],
        "pathLabels": [
          "Cloud Status",
          "Cloud Bundles",
          "Multi Unit",
          "Cloud Status Small Bundle"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cloud",
        "bundle",
        "aws",
        "gcp",
        "azure",
        "digitalocean",
        "linode",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "bundle": {
            "type": "string",
            "enum": [
              "cloud-core",
              "aws-webapp",
              "gcp-ai-app",
              "azure-saas",
              "do-core",
              "linode-core"
            ],
            "default": "cloud-core",
            "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\"."
          },
          "targets": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "provider"
              ],
              "properties": {
                "provider": {
                  "type": "string",
                  "enum": [
                    "aws",
                    "gcp",
                    "azure",
                    "digitalocean",
                    "linode"
                  ],
                  "description": "Cloud provider id."
                },
                "service": {
                  "type": "string",
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                "product": {
                  "type": "string",
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                "region": {
                  "type": "string",
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                "location": {
                  "type": "string",
                  "description": "Provider location alias. Treated the same as region."
                }
              },
              "additionalProperties": false,
              "description": "Targets item object for configuring Cloud Status Small Bundle."
            },
            "minItems": 1,
            "maxItems": 5,
            "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units."
          },
          "includeHistory": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false."
          },
          "includeHealthy": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "bundle",
          "targets",
          "includeHistory",
          "includeHealthy"
        ],
        "fields": [
          {
            "name": "bundle",
            "type": "string",
            "required": false,
            "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".",
            "constraints": {
              "enum": [
                "cloud-core",
                "aws-webapp",
                "gcp-ai-app",
                "azure-saas",
                "do-core",
                "linode-core"
              ],
              "default": "cloud-core"
            }
          },
          {
            "name": "targets",
            "type": "array",
            "required": false,
            "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units.",
            "constraints": {
              "minItems": 1,
              "maxItems": 5
            },
            "items": {
              "type": "object",
              "required": [
                "provider"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "string",
                  "required": true,
                  "description": "Cloud provider id.",
                  "constraints": {
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ]
                  }
                },
                {
                  "name": "service",
                  "type": "string",
                  "required": false,
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                {
                  "name": "product",
                  "type": "string",
                  "required": false,
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                {
                  "name": "region",
                  "type": "string",
                  "required": false,
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                {
                  "name": "location",
                  "type": "string",
                  "required": false,
                  "description": "Provider location alias. Treated the same as region."
                }
              ]
            }
          },
          {
            "name": "includeHistory",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "includeHealthy",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "bundle": "cloud-core",
          "includeHistory": false
        }
      },
      "exampleRequest": {
        "bundle": "cloud-core",
        "includeHistory": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "bundle": {
          "id": "cloud-core",
          "units": 4
        },
        "summary": {
          "worstStatus": "operational",
          "degraded": 0
        },
        "results": []
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "bundle": "cloud-core",
                "includeHistory": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "bundle": {
                  "id": "cloud-core",
                  "units": 4
                },
                "summary": {
                  "worstStatus": "operational",
                  "degraded": 0
                },
                "results": []
              }
            }
          },
          "routeTemplate": "/api/cloud/status/bundle",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "bundle": {
                        "type": "string",
                        "enum": [
                          "cloud-core",
                          "aws-webapp",
                          "gcp-ai-app",
                          "azure-saas",
                          "do-core",
                          "linode-core"
                        ],
                        "default": "cloud-core",
                        "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\"."
                      },
                      "targets": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "provider"
                          ],
                          "properties": {
                            "provider": {
                              "type": "string",
                              "enum": [
                                "aws",
                                "gcp",
                                "azure",
                                "digitalocean",
                                "linode"
                              ],
                              "description": "Cloud provider id."
                            },
                            "service": {
                              "type": "string",
                              "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                            },
                            "product": {
                              "type": "string",
                              "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                            },
                            "region": {
                              "type": "string",
                              "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                            },
                            "location": {
                              "type": "string",
                              "description": "Provider location alias. Treated the same as region."
                            }
                          },
                          "additionalProperties": false,
                          "description": "Targets item object for configuring Cloud Status Small Bundle."
                        },
                        "minItems": 1,
                        "maxItems": 5,
                        "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units."
                      },
                      "includeHistory": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false."
                      },
                      "includeHealthy": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "cloud-status-bundle",
            "url": "https://agentbodega.store/api/cloud/status/bundle",
            "method": "POST",
            "description": "Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.",
            "longDescription": "Purpose: Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nBest use: Use this when an agent needs check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, targets, includeHistory, includeHealthy.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".\n- targets (optional, array): Optional explicit cloud checks. Bundle price covers up to five normalized units. Constraints: min items: 1; max items: 5. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"cloud-core\",\n  \"includeHistory\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cloud Status Small Bundle",
            "category": "cloud-status",
            "kind": "utility",
            "tags": [
              "status",
              "cloud",
              "bundle",
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "bundle",
                "targets",
                "includeHistory",
                "includeHealthy"
              ],
              "fields": [
                {
                  "name": "bundle",
                  "type": "string",
                  "required": false,
                  "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".",
                  "constraints": {
                    "enum": [
                      "cloud-core",
                      "aws-webapp",
                      "gcp-ai-app",
                      "azure-saas",
                      "do-core",
                      "linode-core"
                    ],
                    "default": "cloud-core"
                  }
                },
                {
                  "name": "targets",
                  "type": "array",
                  "required": false,
                  "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units.",
                  "constraints": {
                    "minItems": 1,
                    "maxItems": 5
                  },
                  "items": {
                    "type": "object",
                    "required": [
                      "provider"
                    ],
                    "fields": [
                      {
                        "name": "provider",
                        "type": "string",
                        "required": true,
                        "description": "Cloud provider id.",
                        "constraints": {
                          "enum": [
                            "aws",
                            "gcp",
                            "azure",
                            "digitalocean",
                            "linode"
                          ]
                        }
                      },
                      {
                        "name": "service",
                        "type": "string",
                        "required": false,
                        "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                      },
                      {
                        "name": "product",
                        "type": "string",
                        "required": false,
                        "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                      },
                      {
                        "name": "region",
                        "type": "string",
                        "required": false,
                        "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                      },
                      {
                        "name": "location",
                        "type": "string",
                        "required": false,
                        "description": "Provider location alias. Treated the same as region."
                      }
                    ]
                  }
                },
                {
                  "name": "includeHistory",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "includeHealthy",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "bundle": "cloud-core",
                "includeHistory": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "bundle": {
                  "type": "string",
                  "enum": [
                    "cloud-core",
                    "aws-webapp",
                    "gcp-ai-app",
                    "azure-saas",
                    "do-core",
                    "linode-core"
                  ],
                  "default": "cloud-core",
                  "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\"."
                },
                "targets": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "provider"
                    ],
                    "properties": {
                      "provider": {
                        "type": "string",
                        "enum": [
                          "aws",
                          "gcp",
                          "azure",
                          "digitalocean",
                          "linode"
                        ],
                        "description": "Cloud provider id."
                      },
                      "service": {
                        "type": "string",
                        "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                      },
                      "product": {
                        "type": "string",
                        "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                      },
                      "region": {
                        "type": "string",
                        "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                      },
                      "location": {
                        "type": "string",
                        "description": "Provider location alias. Treated the same as region."
                      }
                    },
                    "additionalProperties": false,
                    "description": "Targets item object for configuring Cloud Status Small Bundle."
                  },
                  "minItems": 1,
                  "maxItems": 5,
                  "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units."
                },
                "includeHistory": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false."
                },
                "includeHealthy": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/cloud/status/bundle",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/cloud/status/bundle",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "cloud-status",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "cloud-status",
          "department": "Cloud Status",
          "aisleId": "cloud-bundles",
          "aisle": "Cloud Bundles",
          "shelfId": "multi-unit",
          "shelf": "Multi Unit",
          "offeringId": "cloud-status-bundle",
          "offering": "Cloud Status Small Bundle",
          "pathIds": [
            "cloud-status",
            "cloud-bundles",
            "multi-unit",
            "cloud-status-bundle"
          ],
          "pathLabels": [
            "Cloud Status",
            "Cloud Bundles",
            "Multi Unit",
            "Cloud Status Small Bundle"
          ],
          "taxonomyPath": "cloud-status.cloud-bundles.multi-unit.cloud-status-bundle",
          "layout": {
            "department": {
              "id": "cloud-status",
              "name": "Cloud Status"
            },
            "aisle": {
              "id": "cloud-bundles",
              "name": "Cloud Bundles"
            },
            "shelf": {
              "id": "multi-unit",
              "name": "Multi Unit"
            },
            "offering": {
              "id": "cloud-status-bundle",
              "name": "Cloud Status Small Bundle"
            },
            "pathIds": [
              "cloud-status",
              "cloud-bundles",
              "multi-unit",
              "cloud-status-bundle"
            ],
            "pathLabels": [
              "Cloud Status",
              "Cloud Bundles",
              "Multi Unit",
              "Cloud Status Small Bundle"
            ]
          }
        },
        "description": {
          "short": "Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.",
          "full": "Purpose: Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nBest use: Use this when an agent needs check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, targets, includeHistory, includeHealthy.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".\n- targets (optional, array): Optional explicit cloud checks. Bundle price covers up to five normalized units. Constraints: min items: 1; max items: 5. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"cloud-core\",\n  \"includeHistory\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "bundle": {
              "type": "string",
              "enum": [
                "cloud-core",
                "aws-webapp",
                "gcp-ai-app",
                "azure-saas",
                "do-core",
                "linode-core"
              ],
              "default": "cloud-core",
              "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\"."
            },
            "targets": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "properties": {
                  "provider": {
                    "type": "string",
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ],
                    "description": "Cloud provider id."
                  },
                  "service": {
                    "type": "string",
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  "product": {
                    "type": "string",
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  "region": {
                    "type": "string",
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  "location": {
                    "type": "string",
                    "description": "Provider location alias. Treated the same as region."
                  }
                },
                "additionalProperties": false,
                "description": "Targets item object for configuring Cloud Status Small Bundle."
              },
              "minItems": 1,
              "maxItems": 5,
              "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "bundle": {
              "type": "string",
              "enum": [
                "cloud-core",
                "aws-webapp",
                "gcp-ai-app",
                "azure-saas",
                "do-core",
                "linode-core"
              ],
              "default": "cloud-core",
              "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\"."
            },
            "targets": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "properties": {
                  "provider": {
                    "type": "string",
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ],
                    "description": "Cloud provider id."
                  },
                  "service": {
                    "type": "string",
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  "product": {
                    "type": "string",
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  "region": {
                    "type": "string",
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  "location": {
                    "type": "string",
                    "description": "Provider location alias. Treated the same as region."
                  }
                },
                "additionalProperties": false,
                "description": "Targets item object for configuring Cloud Status Small Bundle."
              },
              "minItems": 1,
              "maxItems": 5,
              "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "bundle",
            "targets",
            "includeHistory",
            "includeHealthy"
          ],
          "fields": [
            {
              "name": "bundle",
              "type": "string",
              "required": false,
              "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".",
              "constraints": {
                "enum": [
                  "cloud-core",
                  "aws-webapp",
                  "gcp-ai-app",
                  "azure-saas",
                  "do-core",
                  "linode-core"
                ],
                "default": "cloud-core"
              }
            },
            {
              "name": "targets",
              "type": "array",
              "required": false,
              "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units.",
              "constraints": {
                "minItems": 1,
                "maxItems": 5
              },
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "fields": [
                  {
                    "name": "provider",
                    "type": "string",
                    "required": true,
                    "description": "Cloud provider id.",
                    "constraints": {
                      "enum": [
                        "aws",
                        "gcp",
                        "azure",
                        "digitalocean",
                        "linode"
                      ]
                    }
                  },
                  {
                    "name": "service",
                    "type": "string",
                    "required": false,
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  {
                    "name": "product",
                    "type": "string",
                    "required": false,
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  {
                    "name": "region",
                    "type": "string",
                    "required": false,
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  {
                    "name": "location",
                    "type": "string",
                    "required": false,
                    "description": "Provider location alias. Treated the same as region."
                  }
                ]
              }
            },
            {
              "name": "includeHistory",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "includeHealthy",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "bundle": "cloud-core",
            "includeHistory": false
          }
        },
        "exampleRequest": {
          "bundle": "cloud-core",
          "includeHistory": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "bundle": {
            "id": "cloud-core",
            "units": 4
          },
          "summary": {
            "worstStatus": "operational",
            "degraded": 0
          },
          "results": []
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/cloud/status/stack",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cloud Stack Status Bundle",
      "description": "Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.",
      "longDescription": "Purpose: Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nBest use: Use this when an agent needs check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: targets.\nOptional fields: includeHistory, includeHealthy.\n\nAccepted fields:\n- targets (required, array): Caller-selected cloud checks. Stack price covers up to twelve normalized units. Constraints: min items: 3; max items: 12. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"targets\": [\n    {\n      \"provider\": \"aws\",\n      \"service\": \"lambda\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"aws\",\n      \"service\": \"s3\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"gcp\",\n      \"product\": \"cloud-run\",\n      \"location\": \"us-central1\"\n    },\n    {\n      \"provider\": \"azure\",\n      \"service\": \"app-service\",\n      \"region\": \"eastus\"\n    }\n  ],\n  \"includeHistory\": false\n}\n```",
      "category": "cloud-status",
      "kind": "http-json",
      "departmentId": "cloud-status",
      "department": "Cloud Status",
      "aisleId": "cloud-bundles",
      "aisle": "Cloud Bundles",
      "shelfId": "multi-unit",
      "shelf": "Multi Unit",
      "offeringId": "cloud-status-stack",
      "offering": "Cloud Stack Status Bundle",
      "pathIds": [
        "cloud-status",
        "cloud-bundles",
        "multi-unit",
        "cloud-status-stack"
      ],
      "pathLabels": [
        "Cloud Status",
        "Cloud Bundles",
        "Multi Unit",
        "Cloud Stack Status Bundle"
      ],
      "taxonomyPath": "cloud-status.cloud-bundles.multi-unit.cloud-status-stack",
      "layout": {
        "department": {
          "id": "cloud-status",
          "name": "Cloud Status"
        },
        "aisle": {
          "id": "cloud-bundles",
          "name": "Cloud Bundles"
        },
        "shelf": {
          "id": "multi-unit",
          "name": "Multi Unit"
        },
        "offering": {
          "id": "cloud-status-stack",
          "name": "Cloud Stack Status Bundle"
        },
        "pathIds": [
          "cloud-status",
          "cloud-bundles",
          "multi-unit",
          "cloud-status-stack"
        ],
        "pathLabels": [
          "Cloud Status",
          "Cloud Bundles",
          "Multi Unit",
          "Cloud Stack Status Bundle"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cloud",
        "custom-stack",
        "aws",
        "gcp",
        "azure",
        "digitalocean",
        "linode",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "targets"
        ],
        "properties": {
          "targets": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "provider"
              ],
              "properties": {
                "provider": {
                  "type": "string",
                  "enum": [
                    "aws",
                    "gcp",
                    "azure",
                    "digitalocean",
                    "linode"
                  ],
                  "description": "Cloud provider id."
                },
                "service": {
                  "type": "string",
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                "product": {
                  "type": "string",
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                "region": {
                  "type": "string",
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                "location": {
                  "type": "string",
                  "description": "Provider location alias. Treated the same as region."
                }
              },
              "additionalProperties": false,
              "description": "Targets item object for configuring Cloud Stack Status Bundle."
            },
            "minItems": 3,
            "maxItems": 12,
            "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units."
          },
          "includeHistory": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false."
          },
          "includeHealthy": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "targets"
        ],
        "optional": [
          "includeHistory",
          "includeHealthy"
        ],
        "fields": [
          {
            "name": "targets",
            "type": "array",
            "required": true,
            "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units.",
            "constraints": {
              "minItems": 3,
              "maxItems": 12
            },
            "items": {
              "type": "object",
              "required": [
                "provider"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "string",
                  "required": true,
                  "description": "Cloud provider id.",
                  "constraints": {
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ]
                  }
                },
                {
                  "name": "service",
                  "type": "string",
                  "required": false,
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                {
                  "name": "product",
                  "type": "string",
                  "required": false,
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                {
                  "name": "region",
                  "type": "string",
                  "required": false,
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                {
                  "name": "location",
                  "type": "string",
                  "required": false,
                  "description": "Provider location alias. Treated the same as region."
                }
              ]
            }
          },
          {
            "name": "includeHistory",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "includeHealthy",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "targets": [
            {
              "provider": "aws",
              "service": "lambda",
              "region": "us-east-1"
            },
            {
              "provider": "aws",
              "service": "s3",
              "region": "us-east-1"
            },
            {
              "provider": "gcp",
              "product": "cloud-run",
              "location": "us-central1"
            },
            {
              "provider": "azure",
              "service": "app-service",
              "region": "eastus"
            }
          ],
          "includeHistory": false
        }
      },
      "exampleRequest": {
        "targets": [
          {
            "provider": "aws",
            "service": "lambda",
            "region": "us-east-1"
          },
          {
            "provider": "aws",
            "service": "s3",
            "region": "us-east-1"
          },
          {
            "provider": "gcp",
            "product": "cloud-run",
            "location": "us-central1"
          },
          {
            "provider": "azure",
            "service": "app-service",
            "region": "eastus"
          }
        ],
        "includeHistory": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "bundle": {
          "id": "custom-stack",
          "units": 5
        },
        "summary": {
          "worstStatus": "operational",
          "degraded": 0
        },
        "results": []
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "targets": [
                  {
                    "provider": "aws",
                    "service": "lambda",
                    "region": "us-east-1"
                  },
                  {
                    "provider": "aws",
                    "service": "s3",
                    "region": "us-east-1"
                  },
                  {
                    "provider": "gcp",
                    "product": "cloud-run",
                    "location": "us-central1"
                  },
                  {
                    "provider": "azure",
                    "service": "app-service",
                    "region": "eastus"
                  }
                ],
                "includeHistory": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "bundle": {
                  "id": "custom-stack",
                  "units": 5
                },
                "summary": {
                  "worstStatus": "operational",
                  "degraded": 0
                },
                "results": []
              }
            }
          },
          "routeTemplate": "/api/cloud/status/stack",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "targets"
                    ],
                    "properties": {
                      "targets": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "provider"
                          ],
                          "properties": {
                            "provider": {
                              "type": "string",
                              "enum": [
                                "aws",
                                "gcp",
                                "azure",
                                "digitalocean",
                                "linode"
                              ],
                              "description": "Cloud provider id."
                            },
                            "service": {
                              "type": "string",
                              "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                            },
                            "product": {
                              "type": "string",
                              "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                            },
                            "region": {
                              "type": "string",
                              "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                            },
                            "location": {
                              "type": "string",
                              "description": "Provider location alias. Treated the same as region."
                            }
                          },
                          "additionalProperties": false,
                          "description": "Targets item object for configuring Cloud Stack Status Bundle."
                        },
                        "minItems": 3,
                        "maxItems": 12,
                        "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units."
                      },
                      "includeHistory": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false."
                      },
                      "includeHealthy": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "cloud-status-stack",
            "url": "https://agentbodega.store/api/cloud/status/stack",
            "method": "POST",
            "description": "Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.",
            "longDescription": "Purpose: Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nBest use: Use this when an agent needs check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: targets.\nOptional fields: includeHistory, includeHealthy.\n\nAccepted fields:\n- targets (required, array): Caller-selected cloud checks. Stack price covers up to twelve normalized units. Constraints: min items: 3; max items: 12. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"targets\": [\n    {\n      \"provider\": \"aws\",\n      \"service\": \"lambda\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"aws\",\n      \"service\": \"s3\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"gcp\",\n      \"product\": \"cloud-run\",\n      \"location\": \"us-central1\"\n    },\n    {\n      \"provider\": \"azure\",\n      \"service\": \"app-service\",\n      \"region\": \"eastus\"\n    }\n  ],\n  \"includeHistory\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cloud Stack Status Bundle",
            "category": "cloud-status",
            "kind": "http-json",
            "tags": [
              "status",
              "cloud",
              "custom-stack",
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "targets"
              ],
              "optional": [
                "includeHistory",
                "includeHealthy"
              ],
              "fields": [
                {
                  "name": "targets",
                  "type": "array",
                  "required": true,
                  "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units.",
                  "constraints": {
                    "minItems": 3,
                    "maxItems": 12
                  },
                  "items": {
                    "type": "object",
                    "required": [
                      "provider"
                    ],
                    "fields": [
                      {
                        "name": "provider",
                        "type": "string",
                        "required": true,
                        "description": "Cloud provider id.",
                        "constraints": {
                          "enum": [
                            "aws",
                            "gcp",
                            "azure",
                            "digitalocean",
                            "linode"
                          ]
                        }
                      },
                      {
                        "name": "service",
                        "type": "string",
                        "required": false,
                        "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                      },
                      {
                        "name": "product",
                        "type": "string",
                        "required": false,
                        "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                      },
                      {
                        "name": "region",
                        "type": "string",
                        "required": false,
                        "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                      },
                      {
                        "name": "location",
                        "type": "string",
                        "required": false,
                        "description": "Provider location alias. Treated the same as region."
                      }
                    ]
                  }
                },
                {
                  "name": "includeHistory",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "includeHealthy",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "targets": [
                  {
                    "provider": "aws",
                    "service": "lambda",
                    "region": "us-east-1"
                  },
                  {
                    "provider": "aws",
                    "service": "s3",
                    "region": "us-east-1"
                  },
                  {
                    "provider": "gcp",
                    "product": "cloud-run",
                    "location": "us-central1"
                  },
                  {
                    "provider": "azure",
                    "service": "app-service",
                    "region": "eastus"
                  }
                ],
                "includeHistory": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "targets"
              ],
              "properties": {
                "targets": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "provider"
                    ],
                    "properties": {
                      "provider": {
                        "type": "string",
                        "enum": [
                          "aws",
                          "gcp",
                          "azure",
                          "digitalocean",
                          "linode"
                        ],
                        "description": "Cloud provider id."
                      },
                      "service": {
                        "type": "string",
                        "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                      },
                      "product": {
                        "type": "string",
                        "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                      },
                      "region": {
                        "type": "string",
                        "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                      },
                      "location": {
                        "type": "string",
                        "description": "Provider location alias. Treated the same as region."
                      }
                    },
                    "additionalProperties": false,
                    "description": "Targets item object for configuring Cloud Stack Status Bundle."
                  },
                  "minItems": 3,
                  "maxItems": 12,
                  "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units."
                },
                "includeHistory": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false."
                },
                "includeHealthy": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/cloud/status/stack",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/cloud/status/stack",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "cloud-status",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "cloud-status",
          "department": "Cloud Status",
          "aisleId": "cloud-bundles",
          "aisle": "Cloud Bundles",
          "shelfId": "multi-unit",
          "shelf": "Multi Unit",
          "offeringId": "cloud-status-stack",
          "offering": "Cloud Stack Status Bundle",
          "pathIds": [
            "cloud-status",
            "cloud-bundles",
            "multi-unit",
            "cloud-status-stack"
          ],
          "pathLabels": [
            "Cloud Status",
            "Cloud Bundles",
            "Multi Unit",
            "Cloud Stack Status Bundle"
          ],
          "taxonomyPath": "cloud-status.cloud-bundles.multi-unit.cloud-status-stack",
          "layout": {
            "department": {
              "id": "cloud-status",
              "name": "Cloud Status"
            },
            "aisle": {
              "id": "cloud-bundles",
              "name": "Cloud Bundles"
            },
            "shelf": {
              "id": "multi-unit",
              "name": "Multi Unit"
            },
            "offering": {
              "id": "cloud-status-stack",
              "name": "Cloud Stack Status Bundle"
            },
            "pathIds": [
              "cloud-status",
              "cloud-bundles",
              "multi-unit",
              "cloud-status-stack"
            ],
            "pathLabels": [
              "Cloud Status",
              "Cloud Bundles",
              "Multi Unit",
              "Cloud Stack Status Bundle"
            ]
          }
        },
        "description": {
          "short": "Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.",
          "full": "Purpose: Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nBest use: Use this when an agent needs check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: targets.\nOptional fields: includeHistory, includeHealthy.\n\nAccepted fields:\n- targets (required, array): Caller-selected cloud checks. Stack price covers up to twelve normalized units. Constraints: min items: 3; max items: 12. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"targets\": [\n    {\n      \"provider\": \"aws\",\n      \"service\": \"lambda\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"aws\",\n      \"service\": \"s3\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"gcp\",\n      \"product\": \"cloud-run\",\n      \"location\": \"us-central1\"\n    },\n    {\n      \"provider\": \"azure\",\n      \"service\": \"app-service\",\n      \"region\": \"eastus\"\n    }\n  ],\n  \"includeHistory\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "targets"
          ],
          "properties": {
            "targets": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "properties": {
                  "provider": {
                    "type": "string",
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ],
                    "description": "Cloud provider id."
                  },
                  "service": {
                    "type": "string",
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  "product": {
                    "type": "string",
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  "region": {
                    "type": "string",
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  "location": {
                    "type": "string",
                    "description": "Provider location alias. Treated the same as region."
                  }
                },
                "additionalProperties": false,
                "description": "Targets item object for configuring Cloud Stack Status Bundle."
              },
              "minItems": 3,
              "maxItems": 12,
              "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "targets"
          ],
          "properties": {
            "targets": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "properties": {
                  "provider": {
                    "type": "string",
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ],
                    "description": "Cloud provider id."
                  },
                  "service": {
                    "type": "string",
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  "product": {
                    "type": "string",
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  "region": {
                    "type": "string",
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  "location": {
                    "type": "string",
                    "description": "Provider location alias. Treated the same as region."
                  }
                },
                "additionalProperties": false,
                "description": "Targets item object for configuring Cloud Stack Status Bundle."
              },
              "minItems": 3,
              "maxItems": 12,
              "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "targets"
          ],
          "optional": [
            "includeHistory",
            "includeHealthy"
          ],
          "fields": [
            {
              "name": "targets",
              "type": "array",
              "required": true,
              "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units.",
              "constraints": {
                "minItems": 3,
                "maxItems": 12
              },
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "fields": [
                  {
                    "name": "provider",
                    "type": "string",
                    "required": true,
                    "description": "Cloud provider id.",
                    "constraints": {
                      "enum": [
                        "aws",
                        "gcp",
                        "azure",
                        "digitalocean",
                        "linode"
                      ]
                    }
                  },
                  {
                    "name": "service",
                    "type": "string",
                    "required": false,
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  {
                    "name": "product",
                    "type": "string",
                    "required": false,
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  {
                    "name": "region",
                    "type": "string",
                    "required": false,
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  {
                    "name": "location",
                    "type": "string",
                    "required": false,
                    "description": "Provider location alias. Treated the same as region."
                  }
                ]
              }
            },
            {
              "name": "includeHistory",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "includeHealthy",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "targets": [
              {
                "provider": "aws",
                "service": "lambda",
                "region": "us-east-1"
              },
              {
                "provider": "aws",
                "service": "s3",
                "region": "us-east-1"
              },
              {
                "provider": "gcp",
                "product": "cloud-run",
                "location": "us-central1"
              },
              {
                "provider": "azure",
                "service": "app-service",
                "region": "eastus"
              }
            ],
            "includeHistory": false
          }
        },
        "exampleRequest": {
          "targets": [
            {
              "provider": "aws",
              "service": "lambda",
              "region": "us-east-1"
            },
            {
              "provider": "aws",
              "service": "s3",
              "region": "us-east-1"
            },
            {
              "provider": "gcp",
              "product": "cloud-run",
              "location": "us-central1"
            },
            {
              "provider": "azure",
              "service": "app-service",
              "region": "eastus"
            }
          ],
          "includeHistory": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "bundle": {
            "id": "custom-stack",
            "units": 5
          },
          "summary": {
            "worstStatus": "operational",
            "degraded": 0
          },
          "results": []
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/bundle",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Vibe Deploy Readiness Bundle",
      "description": "Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.",
      "longDescription": "Purpose: Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nBest use: Use this when an agent needs check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, services, includeComponents.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".\n- services (optional, array): Optional explicit service ids from /api/status/catalog. Constraints: min items: 1; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"vibe-deploy-readiness\",\n  \"includeComponents\": false\n}\n```",
      "category": "agent-utilities",
      "kind": "utility",
      "departmentId": "agent-utilities",
      "department": "Agent Utilities",
      "aisleId": "agent-artifacts",
      "aisle": "Agent Artifacts",
      "offeringId": "status-bundle-check",
      "offering": "Vibe Deploy Readiness Bundle",
      "pathIds": [
        "agent-utilities",
        "agent-artifacts",
        "status-bundle-check"
      ],
      "pathLabels": [
        "Agent Utilities",
        "Agent Artifacts",
        "Vibe Deploy Readiness Bundle"
      ],
      "taxonomyPath": "agent-utilities.agent-artifacts.status-bundle-check",
      "layout": {
        "department": {
          "id": "agent-utilities",
          "name": "Agent Utilities"
        },
        "aisle": {
          "id": "agent-artifacts",
          "name": "Agent Artifacts"
        },
        "offering": {
          "id": "status-bundle-check",
          "name": "Vibe Deploy Readiness Bundle"
        },
        "pathIds": [
          "agent-utilities",
          "agent-artifacts",
          "status-bundle-check"
        ],
        "pathLabels": [
          "Agent Utilities",
          "Agent Artifacts",
          "Vibe Deploy Readiness Bundle"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "deploy-readiness",
        "github",
        "gitlab",
        "vercel",
        "supabase",
        "openai"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "bundle": {
            "type": "string",
            "enum": [
              "vibe-deploy-readiness",
              "ai-app-stack",
              "source-and-ci",
              "deploy-platforms",
              "all"
            ],
            "default": "vibe-deploy-readiness",
            "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\"."
          },
          "services": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Services item value for Vibe Deploy Readiness Bundle."
            },
            "minItems": 1,
            "maxItems": 20,
            "description": "Optional explicit service ids from /api/status/catalog."
          },
          "includeComponents": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "bundle",
          "services",
          "includeComponents"
        ],
        "fields": [
          {
            "name": "bundle",
            "type": "string",
            "required": false,
            "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".",
            "constraints": {
              "enum": [
                "vibe-deploy-readiness",
                "ai-app-stack",
                "source-and-ci",
                "deploy-platforms",
                "all"
              ],
              "default": "vibe-deploy-readiness"
            }
          },
          {
            "name": "services",
            "type": "array",
            "required": false,
            "description": "Optional explicit service ids from /api/status/catalog.",
            "constraints": {
              "minItems": 1,
              "maxItems": 20
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "bundle": "vibe-deploy-readiness",
          "includeComponents": false
        }
      },
      "exampleRequest": {
        "bundle": "vibe-deploy-readiness",
        "includeComponents": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "bundle": {
          "id": "vibe-deploy-readiness"
        },
        "summary": {
          "status": "operational"
        },
        "results": [
          {
            "service": {
              "id": "github"
            },
            "status": "operational"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "bundle": "vibe-deploy-readiness",
                "includeComponents": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "bundle": {
                  "id": "vibe-deploy-readiness"
                },
                "summary": {
                  "status": "operational"
                },
                "results": [
                  {
                    "service": {
                      "id": "github"
                    },
                    "status": "operational"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/status/bundle",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "bundle": {
                        "type": "string",
                        "enum": [
                          "vibe-deploy-readiness",
                          "ai-app-stack",
                          "source-and-ci",
                          "deploy-platforms",
                          "all"
                        ],
                        "default": "vibe-deploy-readiness",
                        "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\"."
                      },
                      "services": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Services item value for Vibe Deploy Readiness Bundle."
                        },
                        "minItems": 1,
                        "maxItems": 20,
                        "description": "Optional explicit service ids from /api/status/catalog."
                      },
                      "includeComponents": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "status-bundle-check",
            "url": "https://agentbodega.store/api/status/bundle",
            "method": "POST",
            "description": "Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.",
            "longDescription": "Purpose: Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nBest use: Use this when an agent needs check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, services, includeComponents.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".\n- services (optional, array): Optional explicit service ids from /api/status/catalog. Constraints: min items: 1; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"vibe-deploy-readiness\",\n  \"includeComponents\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Vibe Deploy Readiness Bundle",
            "category": "agent-utilities",
            "kind": "utility",
            "tags": [
              "status",
              "deploy-readiness",
              "github",
              "gitlab",
              "vercel",
              "supabase",
              "openai"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "bundle",
                "services",
                "includeComponents"
              ],
              "fields": [
                {
                  "name": "bundle",
                  "type": "string",
                  "required": false,
                  "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".",
                  "constraints": {
                    "enum": [
                      "vibe-deploy-readiness",
                      "ai-app-stack",
                      "source-and-ci",
                      "deploy-platforms",
                      "all"
                    ],
                    "default": "vibe-deploy-readiness"
                  }
                },
                {
                  "name": "services",
                  "type": "array",
                  "required": false,
                  "description": "Optional explicit service ids from /api/status/catalog.",
                  "constraints": {
                    "minItems": 1,
                    "maxItems": 20
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "bundle": "vibe-deploy-readiness",
                "includeComponents": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "bundle": {
                  "type": "string",
                  "enum": [
                    "vibe-deploy-readiness",
                    "ai-app-stack",
                    "source-and-ci",
                    "deploy-platforms",
                    "all"
                  ],
                  "default": "vibe-deploy-readiness",
                  "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\"."
                },
                "services": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Services item value for Vibe Deploy Readiness Bundle."
                  },
                  "minItems": 1,
                  "maxItems": 20,
                  "description": "Optional explicit service ids from /api/status/catalog."
                },
                "includeComponents": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/bundle",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/bundle",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-utilities",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "agent-utilities",
          "department": "Agent Utilities",
          "aisleId": "agent-artifacts",
          "aisle": "Agent Artifacts",
          "offeringId": "status-bundle-check",
          "offering": "Vibe Deploy Readiness Bundle",
          "pathIds": [
            "agent-utilities",
            "agent-artifacts",
            "status-bundle-check"
          ],
          "pathLabels": [
            "Agent Utilities",
            "Agent Artifacts",
            "Vibe Deploy Readiness Bundle"
          ],
          "taxonomyPath": "agent-utilities.agent-artifacts.status-bundle-check",
          "layout": {
            "department": {
              "id": "agent-utilities",
              "name": "Agent Utilities"
            },
            "aisle": {
              "id": "agent-artifacts",
              "name": "Agent Artifacts"
            },
            "offering": {
              "id": "status-bundle-check",
              "name": "Vibe Deploy Readiness Bundle"
            },
            "pathIds": [
              "agent-utilities",
              "agent-artifacts",
              "status-bundle-check"
            ],
            "pathLabels": [
              "Agent Utilities",
              "Agent Artifacts",
              "Vibe Deploy Readiness Bundle"
            ]
          }
        },
        "description": {
          "short": "Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.",
          "full": "Purpose: Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nBest use: Use this when an agent needs check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, services, includeComponents.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".\n- services (optional, array): Optional explicit service ids from /api/status/catalog. Constraints: min items: 1; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"vibe-deploy-readiness\",\n  \"includeComponents\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "bundle": {
              "type": "string",
              "enum": [
                "vibe-deploy-readiness",
                "ai-app-stack",
                "source-and-ci",
                "deploy-platforms",
                "all"
              ],
              "default": "vibe-deploy-readiness",
              "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\"."
            },
            "services": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Services item value for Vibe Deploy Readiness Bundle."
              },
              "minItems": 1,
              "maxItems": 20,
              "description": "Optional explicit service ids from /api/status/catalog."
            },
            "includeComponents": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "bundle": {
              "type": "string",
              "enum": [
                "vibe-deploy-readiness",
                "ai-app-stack",
                "source-and-ci",
                "deploy-platforms",
                "all"
              ],
              "default": "vibe-deploy-readiness",
              "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\"."
            },
            "services": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Services item value for Vibe Deploy Readiness Bundle."
              },
              "minItems": 1,
              "maxItems": 20,
              "description": "Optional explicit service ids from /api/status/catalog."
            },
            "includeComponents": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "bundle",
            "services",
            "includeComponents"
          ],
          "fields": [
            {
              "name": "bundle",
              "type": "string",
              "required": false,
              "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".",
              "constraints": {
                "enum": [
                  "vibe-deploy-readiness",
                  "ai-app-stack",
                  "source-and-ci",
                  "deploy-platforms",
                  "all"
                ],
                "default": "vibe-deploy-readiness"
              }
            },
            {
              "name": "services",
              "type": "array",
              "required": false,
              "description": "Optional explicit service ids from /api/status/catalog.",
              "constraints": {
                "minItems": 1,
                "maxItems": 20
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "bundle": "vibe-deploy-readiness",
            "includeComponents": false
          }
        },
        "exampleRequest": {
          "bundle": "vibe-deploy-readiness",
          "includeComponents": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "bundle": {
            "id": "vibe-deploy-readiness"
          },
          "summary": {
            "status": "operational"
          },
          "results": [
            {
              "service": {
                "id": "github"
              },
              "status": "operational"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/stack",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Custom Stack Status Bundle",
      "description": "Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.",
      "longDescription": "Purpose: Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nBest use: Use this when an agent needs check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: services.\nOptional fields: includeComponents.\n\nAccepted fields:\n- services (required, array): Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host. Constraints: min items: 3; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"services\": [\n    \"github\",\n    \"npm\",\n    \"vercel\",\n    \"supabase\",\n    \"openai\"\n  ],\n  \"includeComponents\": false\n}\n```",
      "category": "agent-utilities",
      "kind": "utility",
      "departmentId": "agent-utilities",
      "department": "Agent Utilities",
      "aisleId": "agent-artifacts",
      "aisle": "Agent Artifacts",
      "offeringId": "status-stack-bundle",
      "offering": "Custom Stack Status Bundle",
      "pathIds": [
        "agent-utilities",
        "agent-artifacts",
        "status-stack-bundle"
      ],
      "pathLabels": [
        "Agent Utilities",
        "Agent Artifacts",
        "Custom Stack Status Bundle"
      ],
      "taxonomyPath": "agent-utilities.agent-artifacts.status-stack-bundle",
      "layout": {
        "department": {
          "id": "agent-utilities",
          "name": "Agent Utilities"
        },
        "aisle": {
          "id": "agent-artifacts",
          "name": "Agent Artifacts"
        },
        "offering": {
          "id": "status-stack-bundle",
          "name": "Custom Stack Status Bundle"
        },
        "pathIds": [
          "agent-utilities",
          "agent-artifacts",
          "status-stack-bundle"
        ],
        "pathLabels": [
          "Agent Utilities",
          "Agent Artifacts",
          "Custom Stack Status Bundle"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "custom-stack",
        "deploy-readiness",
        "github",
        "vercel",
        "supabase",
        "openai"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "services"
        ],
        "properties": {
          "services": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Services item value for Custom Stack Status Bundle."
            },
            "minItems": 3,
            "maxItems": 20,
            "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host."
          },
          "includeComponents": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "services"
        ],
        "optional": [
          "includeComponents"
        ],
        "fields": [
          {
            "name": "services",
            "type": "array",
            "required": true,
            "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host.",
            "constraints": {
              "minItems": 3,
              "maxItems": 20
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "services": [
            "github",
            "npm",
            "vercel",
            "supabase",
            "openai"
          ],
          "includeComponents": false
        }
      },
      "exampleRequest": {
        "services": [
          "github",
          "npm",
          "vercel",
          "supabase",
          "openai"
        ],
        "includeComponents": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "bundle": {
          "id": "vibe-deploy-readiness"
        },
        "summary": {
          "status": "operational"
        },
        "results": [
          {
            "service": {
              "id": "github"
            },
            "status": "operational"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "services": [
                  "github",
                  "npm",
                  "vercel",
                  "supabase",
                  "openai"
                ],
                "includeComponents": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "bundle": {
                  "id": "vibe-deploy-readiness"
                },
                "summary": {
                  "status": "operational"
                },
                "results": [
                  {
                    "service": {
                      "id": "github"
                    },
                    "status": "operational"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/status/stack",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "services"
                    ],
                    "properties": {
                      "services": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Services item value for Custom Stack Status Bundle."
                        },
                        "minItems": 3,
                        "maxItems": 20,
                        "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host."
                      },
                      "includeComponents": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "status-stack-bundle",
            "url": "https://agentbodega.store/api/status/stack",
            "method": "POST",
            "description": "Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.",
            "longDescription": "Purpose: Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nBest use: Use this when an agent needs check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: services.\nOptional fields: includeComponents.\n\nAccepted fields:\n- services (required, array): Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host. Constraints: min items: 3; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"services\": [\n    \"github\",\n    \"npm\",\n    \"vercel\",\n    \"supabase\",\n    \"openai\"\n  ],\n  \"includeComponents\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Custom Stack Status Bundle",
            "category": "agent-utilities",
            "kind": "utility",
            "tags": [
              "status",
              "custom-stack",
              "deploy-readiness",
              "github",
              "vercel",
              "supabase",
              "openai"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "services"
              ],
              "optional": [
                "includeComponents"
              ],
              "fields": [
                {
                  "name": "services",
                  "type": "array",
                  "required": true,
                  "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host.",
                  "constraints": {
                    "minItems": 3,
                    "maxItems": 20
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "services": [
                  "github",
                  "npm",
                  "vercel",
                  "supabase",
                  "openai"
                ],
                "includeComponents": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "services"
              ],
              "properties": {
                "services": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Services item value for Custom Stack Status Bundle."
                  },
                  "minItems": 3,
                  "maxItems": 20,
                  "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host."
                },
                "includeComponents": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/stack",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/stack",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-utilities",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "agent-utilities",
          "department": "Agent Utilities",
          "aisleId": "agent-artifacts",
          "aisle": "Agent Artifacts",
          "offeringId": "status-stack-bundle",
          "offering": "Custom Stack Status Bundle",
          "pathIds": [
            "agent-utilities",
            "agent-artifacts",
            "status-stack-bundle"
          ],
          "pathLabels": [
            "Agent Utilities",
            "Agent Artifacts",
            "Custom Stack Status Bundle"
          ],
          "taxonomyPath": "agent-utilities.agent-artifacts.status-stack-bundle",
          "layout": {
            "department": {
              "id": "agent-utilities",
              "name": "Agent Utilities"
            },
            "aisle": {
              "id": "agent-artifacts",
              "name": "Agent Artifacts"
            },
            "offering": {
              "id": "status-stack-bundle",
              "name": "Custom Stack Status Bundle"
            },
            "pathIds": [
              "agent-utilities",
              "agent-artifacts",
              "status-stack-bundle"
            ],
            "pathLabels": [
              "Agent Utilities",
              "Agent Artifacts",
              "Custom Stack Status Bundle"
            ]
          }
        },
        "description": {
          "short": "Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.",
          "full": "Purpose: Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nBest use: Use this when an agent needs check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: services.\nOptional fields: includeComponents.\n\nAccepted fields:\n- services (required, array): Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host. Constraints: min items: 3; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"services\": [\n    \"github\",\n    \"npm\",\n    \"vercel\",\n    \"supabase\",\n    \"openai\"\n  ],\n  \"includeComponents\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "services"
          ],
          "properties": {
            "services": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Services item value for Custom Stack Status Bundle."
              },
              "minItems": 3,
              "maxItems": 20,
              "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host."
            },
            "includeComponents": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "services"
          ],
          "properties": {
            "services": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Services item value for Custom Stack Status Bundle."
              },
              "minItems": 3,
              "maxItems": 20,
              "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host."
            },
            "includeComponents": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "services"
          ],
          "optional": [
            "includeComponents"
          ],
          "fields": [
            {
              "name": "services",
              "type": "array",
              "required": true,
              "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host.",
              "constraints": {
                "minItems": 3,
                "maxItems": 20
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "services": [
              "github",
              "npm",
              "vercel",
              "supabase",
              "openai"
            ],
            "includeComponents": false
          }
        },
        "exampleRequest": {
          "services": [
            "github",
            "npm",
            "vercel",
            "supabase",
            "openai"
          ],
          "includeComponents": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "bundle": {
            "id": "vibe-deploy-readiness"
          },
          "summary": {
            "status": "operational"
          },
          "results": [
            {
              "service": {
                "id": "github"
              },
              "status": "operational"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/github",
      "type": "http",
      "x402Version": 2,
      "serviceName": "GitHub Status Check",
      "description": "Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitHub Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "github",
      "shelf": "Github",
      "offeringId": "official-status-github",
      "offering": "GitHub Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "github",
        "official-status-github"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Github",
        "GitHub Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.github.official-status-github",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "github",
          "name": "Github"
        },
        "offering": {
          "id": "official-status-github",
          "name": "GitHub Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "github",
          "official-status-github"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Github",
          "GitHub Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "github",
        "git",
        "ci",
        "packages",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for GitHub Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "GitHub Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "GitHub Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/github",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for GitHub Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-github",
            "url": "https://agentbodega.store/api/status/github",
            "method": "POST",
            "description": "Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitHub Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "GitHub Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "github",
              "git",
              "ci",
              "packages",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for GitHub Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/github",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/github",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "github",
          "shelf": "Github",
          "offeringId": "official-status-github",
          "offering": "GitHub Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "github",
            "official-status-github"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Github",
            "GitHub Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.github.official-status-github",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "github",
              "name": "Github"
            },
            "offering": {
              "id": "official-status-github",
              "name": "GitHub Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "github",
              "official-status-github"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Github",
              "GitHub Status Check"
            ]
          }
        },
        "description": {
          "short": "Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitHub Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for GitHub Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for GitHub Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "GitHub Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/gitlab",
      "type": "http",
      "x402Version": 2,
      "serviceName": "GitLab Status Check",
      "description": "Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitLab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "gitlab",
      "shelf": "Gitlab",
      "offeringId": "official-status-gitlab",
      "offering": "GitLab Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "gitlab",
        "official-status-gitlab"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Gitlab",
        "GitLab Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.gitlab.official-status-gitlab",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "gitlab",
          "name": "Gitlab"
        },
        "offering": {
          "id": "official-status-gitlab",
          "name": "GitLab Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "gitlab",
          "official-status-gitlab"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Gitlab",
          "GitLab Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "gitlab",
        "git",
        "ci",
        "packages",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for GitLab Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "GitLab Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "GitLab Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/gitlab",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for GitLab Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-gitlab",
            "url": "https://agentbodega.store/api/status/gitlab",
            "method": "POST",
            "description": "Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitLab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "GitLab Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "gitlab",
              "git",
              "ci",
              "packages",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for GitLab Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/gitlab",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/gitlab",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "gitlab",
          "shelf": "Gitlab",
          "offeringId": "official-status-gitlab",
          "offering": "GitLab Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "gitlab",
            "official-status-gitlab"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Gitlab",
            "GitLab Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.gitlab.official-status-gitlab",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "gitlab",
              "name": "Gitlab"
            },
            "offering": {
              "id": "official-status-gitlab",
              "name": "GitLab Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "gitlab",
              "official-status-gitlab"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Gitlab",
              "GitLab Status Check"
            ]
          }
        },
        "description": {
          "short": "Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitLab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for GitLab Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for GitLab Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "GitLab Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/bitbucket",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Bitbucket Status Check",
      "description": "Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "bitbucket",
      "shelf": "Bitbucket",
      "offeringId": "official-status-bitbucket",
      "offering": "Bitbucket Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "bitbucket",
        "official-status-bitbucket"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Bitbucket",
        "Bitbucket Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.bitbucket.official-status-bitbucket",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "bitbucket",
          "name": "Bitbucket"
        },
        "offering": {
          "id": "official-status-bitbucket",
          "name": "Bitbucket Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "bitbucket",
          "official-status-bitbucket"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Bitbucket",
          "Bitbucket Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "bitbucket",
        "git",
        "ci",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Bitbucket Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Bitbucket Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Bitbucket Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/bitbucket",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Bitbucket Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-bitbucket",
            "url": "https://agentbodega.store/api/status/bitbucket",
            "method": "POST",
            "description": "Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Bitbucket Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "bitbucket",
              "git",
              "ci",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Bitbucket Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/bitbucket",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/bitbucket",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "bitbucket",
          "shelf": "Bitbucket",
          "offeringId": "official-status-bitbucket",
          "offering": "Bitbucket Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "bitbucket",
            "official-status-bitbucket"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Bitbucket",
            "Bitbucket Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.bitbucket.official-status-bitbucket",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "bitbucket",
              "name": "Bitbucket"
            },
            "offering": {
              "id": "official-status-bitbucket",
              "name": "Bitbucket Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "bitbucket",
              "official-status-bitbucket"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Bitbucket",
              "Bitbucket Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Bitbucket Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Bitbucket Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Bitbucket Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/npm",
      "type": "http",
      "x402Version": 2,
      "serviceName": "npm Status Check",
      "description": "Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for npm Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "npm",
      "shelf": "Npm",
      "offeringId": "official-status-npm",
      "offering": "npm Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "npm",
        "official-status-npm"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Npm",
        "npm Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.npm.official-status-npm",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "npm",
          "name": "Npm"
        },
        "offering": {
          "id": "official-status-npm",
          "name": "npm Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "npm",
          "official-status-npm"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Npm",
          "npm Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "npm",
        "node",
        "packages",
        "registry",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for npm Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "npm Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "npm Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/npm",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for npm Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-npm",
            "url": "https://agentbodega.store/api/status/npm",
            "method": "POST",
            "description": "Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for npm Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "npm Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "npm",
              "node",
              "packages",
              "registry",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for npm Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/npm",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/npm",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "npm",
          "shelf": "Npm",
          "offeringId": "official-status-npm",
          "offering": "npm Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "npm",
            "official-status-npm"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Npm",
            "npm Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.npm.official-status-npm",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "npm",
              "name": "Npm"
            },
            "offering": {
              "id": "official-status-npm",
              "name": "npm Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "npm",
              "official-status-npm"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Npm",
              "npm Status Check"
            ]
          }
        },
        "description": {
          "short": "Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for npm Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for npm Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for npm Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "npm Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/vercel",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Vercel Status Check",
      "description": "Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vercel Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "vercel",
      "shelf": "Vercel",
      "offeringId": "official-status-vercel",
      "offering": "Vercel Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "vercel",
        "official-status-vercel"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Vercel",
        "Vercel Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.vercel.official-status-vercel",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "vercel",
          "name": "Vercel"
        },
        "offering": {
          "id": "official-status-vercel",
          "name": "Vercel Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "vercel",
          "official-status-vercel"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Vercel",
          "Vercel Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "vercel",
        "deploy",
        "hosting",
        "nextjs",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Vercel Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Vercel Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Vercel Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/vercel",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Vercel Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-vercel",
            "url": "https://agentbodega.store/api/status/vercel",
            "method": "POST",
            "description": "Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vercel Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Vercel Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "vercel",
              "deploy",
              "hosting",
              "nextjs",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Vercel Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/vercel",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/vercel",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "vercel",
          "shelf": "Vercel",
          "offeringId": "official-status-vercel",
          "offering": "Vercel Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "vercel",
            "official-status-vercel"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Vercel",
            "Vercel Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.vercel.official-status-vercel",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "vercel",
              "name": "Vercel"
            },
            "offering": {
              "id": "official-status-vercel",
              "name": "Vercel Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "vercel",
              "official-status-vercel"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Vercel",
              "Vercel Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vercel Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Vercel Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Vercel Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Vercel Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/netlify",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Netlify Status Check",
      "description": "Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Netlify Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "netlify",
      "shelf": "Netlify",
      "offeringId": "official-status-netlify",
      "offering": "Netlify Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "netlify",
        "official-status-netlify"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Netlify",
        "Netlify Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.netlify.official-status-netlify",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "netlify",
          "name": "Netlify"
        },
        "offering": {
          "id": "official-status-netlify",
          "name": "Netlify Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "netlify",
          "official-status-netlify"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Netlify",
          "Netlify Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "netlify",
        "deploy",
        "hosting",
        "functions",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Netlify Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Netlify Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Netlify Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/netlify",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Netlify Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-netlify",
            "url": "https://agentbodega.store/api/status/netlify",
            "method": "POST",
            "description": "Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Netlify Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Netlify Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "netlify",
              "deploy",
              "hosting",
              "functions",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Netlify Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/netlify",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/netlify",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "netlify",
          "shelf": "Netlify",
          "offeringId": "official-status-netlify",
          "offering": "Netlify Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "netlify",
            "official-status-netlify"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Netlify",
            "Netlify Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.netlify.official-status-netlify",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "netlify",
              "name": "Netlify"
            },
            "offering": {
              "id": "official-status-netlify",
              "name": "Netlify Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "netlify",
              "official-status-netlify"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Netlify",
              "Netlify Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Netlify Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Netlify Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Netlify Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Netlify Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/render",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Render Status Check",
      "description": "Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Render Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "render",
      "shelf": "Render",
      "offeringId": "official-status-render",
      "offering": "Render Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "render",
        "official-status-render"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Render",
        "Render Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.render.official-status-render",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "render",
          "name": "Render"
        },
        "offering": {
          "id": "official-status-render",
          "name": "Render Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "render",
          "official-status-render"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Render",
          "Render Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "render",
        "deploy",
        "hosting",
        "postgres",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Render Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Render Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Render Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/render",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Render Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-render",
            "url": "https://agentbodega.store/api/status/render",
            "method": "POST",
            "description": "Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Render Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Render Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "render",
              "deploy",
              "hosting",
              "postgres",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Render Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/render",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/render",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "render",
          "shelf": "Render",
          "offeringId": "official-status-render",
          "offering": "Render Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "render",
            "official-status-render"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Render",
            "Render Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.render.official-status-render",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "render",
              "name": "Render"
            },
            "offering": {
              "id": "official-status-render",
              "name": "Render Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "render",
              "official-status-render"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Render",
              "Render Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Render Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Render Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Render Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Render Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/fly",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Fly.io Status Check",
      "description": "Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "fly",
      "shelf": "Fly",
      "offeringId": "official-status-fly",
      "offering": "Fly.io Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "fly",
        "official-status-fly"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Fly",
        "Fly.io Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.fly.official-status-fly",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "fly",
          "name": "Fly"
        },
        "offering": {
          "id": "official-status-fly",
          "name": "Fly.io Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "fly",
          "official-status-fly"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Fly",
          "Fly.io Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "fly",
        "flyio",
        "deploy",
        "hosting",
        "edge",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Fly.io Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Fly.io Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Fly.io Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/fly",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Fly.io Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-fly",
            "url": "https://agentbodega.store/api/status/fly",
            "method": "POST",
            "description": "Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Fly.io Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "fly",
              "flyio",
              "deploy",
              "hosting",
              "edge",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Fly.io Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/fly",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/fly",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "fly",
          "shelf": "Fly",
          "offeringId": "official-status-fly",
          "offering": "Fly.io Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "fly",
            "official-status-fly"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Fly",
            "Fly.io Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.fly.official-status-fly",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "fly",
              "name": "Fly"
            },
            "offering": {
              "id": "official-status-fly",
              "name": "Fly.io Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "fly",
              "official-status-fly"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Fly",
              "Fly.io Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Fly.io Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Fly.io Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Fly.io Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/railway",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Railway Status Check",
      "description": "Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Railway Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "railway",
      "shelf": "Railway",
      "offeringId": "official-status-railway",
      "offering": "Railway Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "railway",
        "official-status-railway"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Railway",
        "Railway Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.railway.official-status-railway",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "railway",
          "name": "Railway"
        },
        "offering": {
          "id": "official-status-railway",
          "name": "Railway Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "railway",
          "official-status-railway"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Railway",
          "Railway Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "railway",
        "deploy",
        "hosting",
        "builds",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Railway Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Railway Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Railway Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/railway",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Railway Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-railway",
            "url": "https://agentbodega.store/api/status/railway",
            "method": "POST",
            "description": "Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Railway Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Railway Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "railway",
              "deploy",
              "hosting",
              "builds",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Railway Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/railway",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/railway",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "railway",
          "shelf": "Railway",
          "offeringId": "official-status-railway",
          "offering": "Railway Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "railway",
            "official-status-railway"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Railway",
            "Railway Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.railway.official-status-railway",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "railway",
              "name": "Railway"
            },
            "offering": {
              "id": "official-status-railway",
              "name": "Railway Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "railway",
              "official-status-railway"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Railway",
              "Railway Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Railway Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Railway Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Railway Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Railway Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/coinbase",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Coinbase Status Check",
      "description": "Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "coinbase",
      "shelf": "Coinbase",
      "offeringId": "official-status-coinbase",
      "offering": "Coinbase Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "coinbase",
        "official-status-coinbase"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Coinbase",
        "Coinbase Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.coinbase.official-status-coinbase",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "coinbase",
          "name": "Coinbase"
        },
        "offering": {
          "id": "official-status-coinbase",
          "name": "Coinbase Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "coinbase",
          "official-status-coinbase"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Coinbase",
          "Coinbase Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "coinbase",
        "crypto",
        "payments",
        "wallet",
        "api",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Coinbase Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Coinbase Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Coinbase Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/coinbase",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Coinbase Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-coinbase",
            "url": "https://agentbodega.store/api/status/coinbase",
            "method": "POST",
            "description": "Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Coinbase Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "coinbase",
              "crypto",
              "payments",
              "wallet",
              "api",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Coinbase Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/coinbase",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/coinbase",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "coinbase",
          "shelf": "Coinbase",
          "offeringId": "official-status-coinbase",
          "offering": "Coinbase Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "coinbase",
            "official-status-coinbase"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Coinbase",
            "Coinbase Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.coinbase.official-status-coinbase",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "coinbase",
              "name": "Coinbase"
            },
            "offering": {
              "id": "official-status-coinbase",
              "name": "Coinbase Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "coinbase",
              "official-status-coinbase"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Coinbase",
              "Coinbase Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Coinbase Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Coinbase Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Coinbase Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/cursor",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cursor Status Check",
      "description": "Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cursor Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "cursor",
      "shelf": "Cursor",
      "offeringId": "official-status-cursor",
      "offering": "Cursor Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "cursor",
        "official-status-cursor"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Cursor",
        "Cursor Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.cursor.official-status-cursor",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "cursor",
          "name": "Cursor"
        },
        "offering": {
          "id": "official-status-cursor",
          "name": "Cursor Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "cursor",
          "official-status-cursor"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Cursor",
          "Cursor Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cursor",
        "ai",
        "editor",
        "ide",
        "developer-tools",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Cursor Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Cursor Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Cursor Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/cursor",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Cursor Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-cursor",
            "url": "https://agentbodega.store/api/status/cursor",
            "method": "POST",
            "description": "Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cursor Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cursor Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "cursor",
              "ai",
              "editor",
              "ide",
              "developer-tools",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Cursor Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/cursor",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/cursor",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "cursor",
          "shelf": "Cursor",
          "offeringId": "official-status-cursor",
          "offering": "Cursor Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "cursor",
            "official-status-cursor"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Cursor",
            "Cursor Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.cursor.official-status-cursor",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "cursor",
              "name": "Cursor"
            },
            "offering": {
              "id": "official-status-cursor",
              "name": "Cursor Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "cursor",
              "official-status-cursor"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Cursor",
              "Cursor Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cursor Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Cursor Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Cursor Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Cursor Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/bambulab",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Bambu Lab Status Check",
      "description": "Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "bambulab",
      "shelf": "Bambulab",
      "offeringId": "official-status-bambulab",
      "offering": "Bambu Lab Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "bambulab",
        "official-status-bambulab"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Bambulab",
        "Bambu Lab Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.bambulab.official-status-bambulab",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "bambulab",
          "name": "Bambulab"
        },
        "offering": {
          "id": "official-status-bambulab",
          "name": "Bambu Lab Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "bambulab",
          "official-status-bambulab"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Bambulab",
          "Bambu Lab Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "bambu-lab",
        "3d-printing",
        "hardware",
        "iot",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Bambu Lab Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Bambu Lab Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Bambu Lab Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/bambulab",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Bambu Lab Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-bambulab",
            "url": "https://agentbodega.store/api/status/bambulab",
            "method": "POST",
            "description": "Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Bambu Lab Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "bambu-lab",
              "3d-printing",
              "hardware",
              "iot",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Bambu Lab Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/bambulab",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/bambulab",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "bambulab",
          "shelf": "Bambulab",
          "offeringId": "official-status-bambulab",
          "offering": "Bambu Lab Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "bambulab",
            "official-status-bambulab"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Bambulab",
            "Bambu Lab Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.bambulab.official-status-bambulab",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "bambulab",
              "name": "Bambulab"
            },
            "offering": {
              "id": "official-status-bambulab",
              "name": "Bambu Lab Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "bambulab",
              "official-status-bambulab"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Bambulab",
              "Bambu Lab Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Bambu Lab Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Bambu Lab Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Bambu Lab Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/ring",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Ring Status Check",
      "description": "Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Ring Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "ring",
      "shelf": "Ring",
      "offeringId": "official-status-ring",
      "offering": "Ring Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "ring",
        "official-status-ring"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Ring",
        "Ring Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.ring.official-status-ring",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "ring",
          "name": "Ring"
        },
        "offering": {
          "id": "official-status-ring",
          "name": "Ring Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "ring",
          "official-status-ring"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Ring",
          "Ring Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "ring",
        "iot",
        "security",
        "camera",
        "smart-home",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Ring Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Ring Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Ring Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/ring",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Ring Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-ring",
            "url": "https://agentbodega.store/api/status/ring",
            "method": "POST",
            "description": "Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Ring Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Ring Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "ring",
              "iot",
              "security",
              "camera",
              "smart-home",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Ring Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/ring",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/ring",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "ring",
          "shelf": "Ring",
          "offeringId": "official-status-ring",
          "offering": "Ring Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "ring",
            "official-status-ring"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Ring",
            "Ring Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.ring.official-status-ring",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "ring",
              "name": "Ring"
            },
            "offering": {
              "id": "official-status-ring",
              "name": "Ring Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "ring",
              "official-status-ring"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Ring",
              "Ring Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Ring Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Ring Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Ring Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Ring Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/cloudflare",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cloudflare Status Check",
      "description": "Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "cloudflare",
      "shelf": "Cloudflare",
      "offeringId": "official-status-cloudflare",
      "offering": "Cloudflare Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "cloudflare",
        "official-status-cloudflare"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Cloudflare",
        "Cloudflare Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.cloudflare.official-status-cloudflare",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "cloudflare",
          "name": "Cloudflare"
        },
        "offering": {
          "id": "official-status-cloudflare",
          "name": "Cloudflare Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "cloudflare",
          "official-status-cloudflare"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Cloudflare",
          "Cloudflare Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cloudflare",
        "dns",
        "cdn",
        "workers",
        "edge",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Cloudflare Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Cloudflare Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Cloudflare Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/cloudflare",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Cloudflare Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-cloudflare",
            "url": "https://agentbodega.store/api/status/cloudflare",
            "method": "POST",
            "description": "Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cloudflare Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "cloudflare",
              "dns",
              "cdn",
              "workers",
              "edge",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Cloudflare Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/cloudflare",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/cloudflare",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "cloudflare",
          "shelf": "Cloudflare",
          "offeringId": "official-status-cloudflare",
          "offering": "Cloudflare Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "cloudflare",
            "official-status-cloudflare"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Cloudflare",
            "Cloudflare Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.cloudflare.official-status-cloudflare",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "cloudflare",
              "name": "Cloudflare"
            },
            "offering": {
              "id": "official-status-cloudflare",
              "name": "Cloudflare Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "cloudflare",
              "official-status-cloudflare"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Cloudflare",
              "Cloudflare Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Cloudflare Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Cloudflare Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Cloudflare Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/supabase",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Supabase Status Check",
      "description": "Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Supabase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "supabase",
      "shelf": "Supabase",
      "offeringId": "official-status-supabase",
      "offering": "Supabase Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "supabase",
        "official-status-supabase"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Supabase",
        "Supabase Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.supabase.official-status-supabase",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "supabase",
          "name": "Supabase"
        },
        "offering": {
          "id": "official-status-supabase",
          "name": "Supabase Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "supabase",
          "official-status-supabase"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Supabase",
          "Supabase Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "supabase",
        "postgres",
        "auth",
        "storage",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Supabase Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Supabase Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Supabase Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/supabase",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Supabase Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-supabase",
            "url": "https://agentbodega.store/api/status/supabase",
            "method": "POST",
            "description": "Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Supabase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Supabase Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "supabase",
              "postgres",
              "auth",
              "storage",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Supabase Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/supabase",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/supabase",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "supabase",
          "shelf": "Supabase",
          "offeringId": "official-status-supabase",
          "offering": "Supabase Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "supabase",
            "official-status-supabase"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Supabase",
            "Supabase Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.supabase.official-status-supabase",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "supabase",
              "name": "Supabase"
            },
            "offering": {
              "id": "official-status-supabase",
              "name": "Supabase Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "supabase",
              "official-status-supabase"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Supabase",
              "Supabase Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Supabase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Supabase Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Supabase Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Supabase Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/convex",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Convex Status Check",
      "description": "Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Convex Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "convex",
      "shelf": "Convex",
      "offeringId": "official-status-convex",
      "offering": "Convex Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "convex",
        "official-status-convex"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Convex",
        "Convex Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.convex.official-status-convex",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "convex",
          "name": "Convex"
        },
        "offering": {
          "id": "official-status-convex",
          "name": "Convex Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "convex",
          "official-status-convex"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Convex",
          "Convex Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "convex",
        "backend",
        "database",
        "realtime",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Convex Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Convex Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Convex Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/convex",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Convex Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-convex",
            "url": "https://agentbodega.store/api/status/convex",
            "method": "POST",
            "description": "Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Convex Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Convex Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "convex",
              "backend",
              "database",
              "realtime",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Convex Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/convex",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/convex",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "convex",
          "shelf": "Convex",
          "offeringId": "official-status-convex",
          "offering": "Convex Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "convex",
            "official-status-convex"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Convex",
            "Convex Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.convex.official-status-convex",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "convex",
              "name": "Convex"
            },
            "offering": {
              "id": "official-status-convex",
              "name": "Convex Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "convex",
              "official-status-convex"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Convex",
              "Convex Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Convex Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Convex Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Convex Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Convex Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/clerk",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Clerk Status Check",
      "description": "Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Clerk Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "clerk",
      "shelf": "Clerk",
      "offeringId": "official-status-clerk",
      "offering": "Clerk Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "clerk",
        "official-status-clerk"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Clerk",
        "Clerk Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.clerk.official-status-clerk",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "clerk",
          "name": "Clerk"
        },
        "offering": {
          "id": "official-status-clerk",
          "name": "Clerk Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "clerk",
          "official-status-clerk"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Clerk",
          "Clerk Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "clerk",
        "auth",
        "identity",
        "sessions",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Clerk Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Clerk Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Clerk Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/clerk",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Clerk Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-clerk",
            "url": "https://agentbodega.store/api/status/clerk",
            "method": "POST",
            "description": "Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Clerk Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Clerk Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "clerk",
              "auth",
              "identity",
              "sessions",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Clerk Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/clerk",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/clerk",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "clerk",
          "shelf": "Clerk",
          "offeringId": "official-status-clerk",
          "offering": "Clerk Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "clerk",
            "official-status-clerk"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Clerk",
            "Clerk Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.clerk.official-status-clerk",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "clerk",
              "name": "Clerk"
            },
            "offering": {
              "id": "official-status-clerk",
              "name": "Clerk Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "clerk",
              "official-status-clerk"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Clerk",
              "Clerk Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Clerk Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Clerk Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Clerk Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Clerk Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/openai",
      "type": "http",
      "x402Version": 2,
      "serviceName": "OpenAI Status Check",
      "description": "Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "openai",
      "shelf": "Openai",
      "offeringId": "official-status-openai",
      "offering": "OpenAI Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "openai",
        "official-status-openai"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Openai",
        "OpenAI Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.openai.official-status-openai",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "openai",
          "name": "Openai"
        },
        "offering": {
          "id": "official-status-openai",
          "name": "OpenAI Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "openai",
          "official-status-openai"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Openai",
          "OpenAI Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "openai",
        "ai",
        "llm",
        "api",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for OpenAI Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "OpenAI Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "OpenAI Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/openai",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for OpenAI Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-openai",
            "url": "https://agentbodega.store/api/status/openai",
            "method": "POST",
            "description": "Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "OpenAI Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "openai",
              "ai",
              "llm",
              "api",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for OpenAI Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/openai",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/openai",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "openai",
          "shelf": "Openai",
          "offeringId": "official-status-openai",
          "offering": "OpenAI Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "openai",
            "official-status-openai"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Openai",
            "OpenAI Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.openai.official-status-openai",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "openai",
              "name": "Openai"
            },
            "offering": {
              "id": "official-status-openai",
              "name": "OpenAI Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "openai",
              "official-status-openai"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Openai",
              "OpenAI Status Check"
            ]
          }
        },
        "description": {
          "short": "Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for OpenAI Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for OpenAI Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "OpenAI Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/anthropic",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Anthropic Claude Status Check",
      "description": "Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "anthropic",
      "shelf": "Anthropic",
      "offeringId": "official-status-anthropic",
      "offering": "Anthropic Claude Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "anthropic",
        "official-status-anthropic"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Anthropic",
        "Anthropic Claude Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.anthropic.official-status-anthropic",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "anthropic",
          "name": "Anthropic"
        },
        "offering": {
          "id": "official-status-anthropic",
          "name": "Anthropic Claude Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "anthropic",
          "official-status-anthropic"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Anthropic",
          "Anthropic Claude Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "anthropic",
        "claude",
        "ai",
        "llm",
        "api",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Anthropic Claude Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Anthropic Claude Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Anthropic Claude Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/anthropic",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Anthropic Claude Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-anthropic",
            "url": "https://agentbodega.store/api/status/anthropic",
            "method": "POST",
            "description": "Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Anthropic Claude Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "anthropic",
              "claude",
              "ai",
              "llm",
              "api",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Anthropic Claude Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/anthropic",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/anthropic",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "anthropic",
          "shelf": "Anthropic",
          "offeringId": "official-status-anthropic",
          "offering": "Anthropic Claude Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "anthropic",
            "official-status-anthropic"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Anthropic",
            "Anthropic Claude Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.anthropic.official-status-anthropic",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "anthropic",
              "name": "Anthropic"
            },
            "offering": {
              "id": "official-status-anthropic",
              "name": "Anthropic Claude Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "anthropic",
              "official-status-anthropic"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Anthropic",
              "Anthropic Claude Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Anthropic Claude Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Anthropic Claude Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Anthropic Claude Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/check/domain",
      "type": "http",
      "x402Version": 2,
      "serviceName": "DNS SSL Email Launch Check",
      "description": "Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.",
      "longDescription": "Purpose: Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nBest use: Use this when an agent needs check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: domain.\nOptional fields: dkimSelectors.\n\nAccepted fields:\n- domain (required, string): Domain name to inspect, without a URL scheme. Constraints: min length: 1.\n- dkimSelectors (optional, array): Optional DKIM selectors to check, such as google or selector1. Constraints: max items: 10.\n\nExample request body:\n```json\n{\n  \"domain\": \"example.com\",\n  \"dkimSelectors\": [\n    \"google\",\n    \"selector1\"\n  ]\n}\n```",
      "category": "launch-checks",
      "kind": "utility",
      "departmentId": "launch-checks",
      "department": "Launch Checks",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "utility",
      "shelf": "Utility",
      "offeringId": "domain-launch-check",
      "offering": "DNS SSL Email Launch Check",
      "pathIds": [
        "launch-checks",
        "readiness-audits",
        "utility",
        "domain-launch-check"
      ],
      "pathLabels": [
        "Launch Checks",
        "Readiness Audits",
        "Utility",
        "DNS SSL Email Launch Check"
      ],
      "taxonomyPath": "launch-checks.readiness-audits.utility.domain-launch-check",
      "layout": {
        "department": {
          "id": "launch-checks",
          "name": "Launch Checks"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "utility",
          "name": "Utility"
        },
        "offering": {
          "id": "domain-launch-check",
          "name": "DNS SSL Email Launch Check"
        },
        "pathIds": [
          "launch-checks",
          "readiness-audits",
          "utility",
          "domain-launch-check"
        ],
        "pathLabels": [
          "Launch Checks",
          "Readiness Audits",
          "Utility",
          "DNS SSL Email Launch Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "dns",
        "ssl",
        "email",
        "deliverability",
        "launch-check"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "20000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "20000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "domain"
        ],
        "properties": {
          "domain": {
            "type": "string",
            "minLength": 1,
            "description": "Domain name to inspect, without a URL scheme."
          },
          "dkimSelectors": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Dkim Selectors item value for DNS SSL Email Launch Check."
            },
            "maxItems": 10,
            "description": "Optional DKIM selectors to check, such as google or selector1."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "domain"
        ],
        "optional": [
          "dkimSelectors"
        ],
        "fields": [
          {
            "name": "domain",
            "type": "string",
            "required": true,
            "description": "Domain name to inspect, without a URL scheme.",
            "constraints": {
              "minLength": 1
            }
          },
          {
            "name": "dkimSelectors",
            "type": "array",
            "required": false,
            "description": "Optional DKIM selectors to check, such as google or selector1.",
            "constraints": {
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "domain": "example.com",
          "dkimSelectors": [
            "google",
            "selector1"
          ]
        }
      },
      "exampleRequest": {
        "domain": "example.com",
        "dkimSelectors": [
          "google",
          "selector1"
        ]
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "domain": "example.com",
        "summary": {
          "status": "pass",
          "score": 92
        },
        "checks": [
          {
            "name": "https",
            "status": "pass"
          },
          {
            "name": "spf",
            "status": "pass"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "domain": "example.com",
                "dkimSelectors": [
                  "google",
                  "selector1"
                ]
              }
            },
            "output": {
              "type": "json",
              "example": {
                "domain": "example.com",
                "summary": {
                  "status": "pass",
                  "score": 92
                },
                "checks": [
                  {
                    "name": "https",
                    "status": "pass"
                  },
                  {
                    "name": "spf",
                    "status": "pass"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/check/domain",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "domain"
                    ],
                    "properties": {
                      "domain": {
                        "type": "string",
                        "minLength": 1,
                        "description": "Domain name to inspect, without a URL scheme."
                      },
                      "dkimSelectors": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Dkim Selectors item value for DNS SSL Email Launch Check."
                        },
                        "maxItems": 10,
                        "description": "Optional DKIM selectors to check, such as google or selector1."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "domain-launch-check",
            "url": "https://agentbodega.store/api/check/domain",
            "method": "POST",
            "description": "Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.",
            "longDescription": "Purpose: Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nBest use: Use this when an agent needs check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: domain.\nOptional fields: dkimSelectors.\n\nAccepted fields:\n- domain (required, string): Domain name to inspect, without a URL scheme. Constraints: min length: 1.\n- dkimSelectors (optional, array): Optional DKIM selectors to check, such as google or selector1. Constraints: max items: 10.\n\nExample request body:\n```json\n{\n  \"domain\": \"example.com\",\n  \"dkimSelectors\": [\n    \"google\",\n    \"selector1\"\n  ]\n}\n```",
            "mimeType": "application/json",
            "serviceName": "DNS SSL Email Launch Check",
            "category": "launch-checks",
            "kind": "utility",
            "tags": [
              "dns",
              "ssl",
              "email",
              "deliverability",
              "launch-check"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "domain"
              ],
              "optional": [
                "dkimSelectors"
              ],
              "fields": [
                {
                  "name": "domain",
                  "type": "string",
                  "required": true,
                  "description": "Domain name to inspect, without a URL scheme.",
                  "constraints": {
                    "minLength": 1
                  }
                },
                {
                  "name": "dkimSelectors",
                  "type": "array",
                  "required": false,
                  "description": "Optional DKIM selectors to check, such as google or selector1.",
                  "constraints": {
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "domain": "example.com",
                "dkimSelectors": [
                  "google",
                  "selector1"
                ]
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "domain"
              ],
              "properties": {
                "domain": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Domain name to inspect, without a URL scheme."
                },
                "dkimSelectors": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Dkim Selectors item value for DNS SSL Email Launch Check."
                  },
                  "maxItems": 10,
                  "description": "Optional DKIM selectors to check, such as google or selector1."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.02"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.02",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/check/domain",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.02"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/check/domain",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "launch-checks",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "launch-checks",
          "department": "Launch Checks",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "utility",
          "shelf": "Utility",
          "offeringId": "domain-launch-check",
          "offering": "DNS SSL Email Launch Check",
          "pathIds": [
            "launch-checks",
            "readiness-audits",
            "utility",
            "domain-launch-check"
          ],
          "pathLabels": [
            "Launch Checks",
            "Readiness Audits",
            "Utility",
            "DNS SSL Email Launch Check"
          ],
          "taxonomyPath": "launch-checks.readiness-audits.utility.domain-launch-check",
          "layout": {
            "department": {
              "id": "launch-checks",
              "name": "Launch Checks"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "utility",
              "name": "Utility"
            },
            "offering": {
              "id": "domain-launch-check",
              "name": "DNS SSL Email Launch Check"
            },
            "pathIds": [
              "launch-checks",
              "readiness-audits",
              "utility",
              "domain-launch-check"
            ],
            "pathLabels": [
              "Launch Checks",
              "Readiness Audits",
              "Utility",
              "DNS SSL Email Launch Check"
            ]
          }
        },
        "description": {
          "short": "Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.",
          "full": "Purpose: Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nBest use: Use this when an agent needs check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: domain.\nOptional fields: dkimSelectors.\n\nAccepted fields:\n- domain (required, string): Domain name to inspect, without a URL scheme. Constraints: min length: 1.\n- dkimSelectors (optional, array): Optional DKIM selectors to check, such as google or selector1. Constraints: max items: 10.\n\nExample request body:\n```json\n{\n  \"domain\": \"example.com\",\n  \"dkimSelectors\": [\n    \"google\",\n    \"selector1\"\n  ]\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "domain"
          ],
          "properties": {
            "domain": {
              "type": "string",
              "minLength": 1,
              "description": "Domain name to inspect, without a URL scheme."
            },
            "dkimSelectors": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Dkim Selectors item value for DNS SSL Email Launch Check."
              },
              "maxItems": 10,
              "description": "Optional DKIM selectors to check, such as google or selector1."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "domain"
          ],
          "properties": {
            "domain": {
              "type": "string",
              "minLength": 1,
              "description": "Domain name to inspect, without a URL scheme."
            },
            "dkimSelectors": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Dkim Selectors item value for DNS SSL Email Launch Check."
              },
              "maxItems": 10,
              "description": "Optional DKIM selectors to check, such as google or selector1."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "domain"
          ],
          "optional": [
            "dkimSelectors"
          ],
          "fields": [
            {
              "name": "domain",
              "type": "string",
              "required": true,
              "description": "Domain name to inspect, without a URL scheme.",
              "constraints": {
                "minLength": 1
              }
            },
            {
              "name": "dkimSelectors",
              "type": "array",
              "required": false,
              "description": "Optional DKIM selectors to check, such as google or selector1.",
              "constraints": {
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "domain": "example.com",
            "dkimSelectors": [
              "google",
              "selector1"
            ]
          }
        },
        "exampleRequest": {
          "domain": "example.com",
          "dkimSelectors": [
            "google",
            "selector1"
          ]
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "domain": "example.com",
          "summary": {
            "status": "pass",
            "score": 92
          },
          "checks": [
            {
              "name": "https",
              "status": "pass"
            },
            {
              "name": "spf",
              "status": "pass"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/name/check",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Name Availability Check",
      "description": "Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.",
      "longDescription": "Purpose: Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nBest use: Use this when an agent needs check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: candidate.\nOptional fields: tlds, handles, includeWarnings.\n\nAccepted fields:\n- candidate (required, string): Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @. Constraints: min length: 1; max length: 80.\n- tlds (optional, array): Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing. Constraints: default: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"; max items: 10.\n- handles (optional, array): Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here. Constraints: default: \"github\"; max items: 1.\n- includeWarnings (optional, boolean): Include actionability and legal/ownership warnings in the response. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"candidate\": \"agentbodega\",\n  \"tlds\": [\n    \"com\",\n    \"dev\"\n  ],\n  \"handles\": [\n    \"github\"\n  ],\n  \"includeWarnings\": true\n}\n```",
      "category": "launch-checks",
      "kind": "name-availability-tool",
      "departmentId": "launch-checks",
      "department": "Launch Checks",
      "aisleId": "name-availability",
      "aisle": "Name Availability",
      "shelfId": "quick-checks",
      "shelf": "Quick Checks",
      "offeringId": "name-availability-check",
      "offering": "Name Availability Check",
      "pathIds": [
        "launch-checks",
        "name-availability",
        "quick-checks",
        "name-availability-check"
      ],
      "pathLabels": [
        "Launch Checks",
        "Name Availability",
        "Quick Checks",
        "Name Availability Check"
      ],
      "taxonomyPath": "launch-checks.name-availability.quick-checks.name-availability-check",
      "layout": {
        "department": {
          "id": "launch-checks",
          "name": "Launch Checks"
        },
        "aisle": {
          "id": "name-availability",
          "name": "Name Availability"
        },
        "shelf": {
          "id": "quick-checks",
          "name": "Quick Checks"
        },
        "offering": {
          "id": "name-availability-check",
          "name": "Name Availability Check"
        },
        "pathIds": [
          "launch-checks",
          "name-availability",
          "quick-checks",
          "name-availability-check"
        ],
        "pathLabels": [
          "Launch Checks",
          "Name Availability",
          "Quick Checks",
          "Name Availability Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "name-availability",
        "domain-availability",
        "github",
        "brand-check",
        "launch-check",
        "agent-tools",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "candidate"
        ],
        "properties": {
          "candidate": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @."
          },
          "tlds": {
            "type": "array",
            "maxItems": 10,
            "default": [
              "com",
              "ai",
              "dev",
              "app",
              "io",
              "co",
              "net",
              "org",
              "xyz",
              "store"
            ],
            "items": {
              "type": "string",
              "enum": [
                "com",
                "ai",
                "dev",
                "app",
                "io",
                "co",
                "net",
                "org",
                "xyz",
                "store"
              ],
              "description": "Tlds item filter for Name Availability Check. Accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\". Constraints: accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"."
            },
            "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing."
          },
          "handles": {
            "type": "array",
            "maxItems": 1,
            "default": [
              "github"
            ],
            "items": {
              "type": "string",
              "enum": [
                "github"
              ],
              "description": "Handles item filter for Name Availability Check. Accepted values: \"github\". Constraints: accepted values: \"github\"."
            },
            "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here."
          },
          "includeWarnings": {
            "type": "boolean",
            "default": true,
            "description": "Include actionability and legal/ownership warnings in the response."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "candidate"
        ],
        "optional": [
          "tlds",
          "handles",
          "includeWarnings"
        ],
        "fields": [
          {
            "name": "candidate",
            "type": "string",
            "required": true,
            "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @.",
            "constraints": {
              "minLength": 1,
              "maxLength": 80
            }
          },
          {
            "name": "tlds",
            "type": "array",
            "required": false,
            "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing.",
            "constraints": {
              "default": [
                "com",
                "ai",
                "dev",
                "app",
                "io",
                "co",
                "net",
                "org",
                "xyz",
                "store"
              ],
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "handles",
            "type": "array",
            "required": false,
            "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here.",
            "constraints": {
              "default": [
                "github"
              ],
              "maxItems": 1
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "includeWarnings",
            "type": "boolean",
            "required": false,
            "description": "Include actionability and legal/ownership warnings in the response.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "candidate": "agentbodega",
          "tlds": [
            "com",
            "dev"
          ],
          "handles": [
            "github"
          ],
          "includeWarnings": true
        }
      },
      "exampleRequest": {
        "candidate": "agentbodega",
        "tlds": [
          "com",
          "dev"
        ],
        "handles": [
          "github"
        ],
        "includeWarnings": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "candidate",
          "checkedAt",
          "summary",
          "domains",
          "handles"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "candidate": {
            "type": "string"
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          },
          "summary": {
            "type": "object",
            "required": [
              "recommendation",
              "domainCounts",
              "handleCounts"
            ],
            "properties": {
              "recommendation": {
                "type": "string",
                "enum": [
                  "shortlist",
                  "review",
                  "avoid"
                ]
              },
              "domainCounts": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "handleCounts": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "highConfidenceOnly": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          },
          "domains": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "domain",
                "tld",
                "status",
                "confidence",
                "source",
                "checkedAt"
              ],
              "properties": {
                "domain": {
                  "type": "string"
                },
                "tld": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "available",
                    "taken",
                    "unknown"
                  ]
                },
                "confidence": {
                  "type": "string",
                  "enum": [
                    "high",
                    "low"
                  ]
                },
                "source": {
                  "type": "string"
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "evidence": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          },
          "handles": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "platform",
                "handle",
                "status",
                "confidence",
                "source",
                "checkedAt"
              ],
              "properties": {
                "platform": {
                  "type": "string",
                  "enum": [
                    "github"
                  ]
                },
                "handle": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "available",
                    "taken",
                    "unknown",
                    "invalid"
                  ]
                },
                "confidence": {
                  "type": "string",
                  "enum": [
                    "high",
                    "low"
                  ]
                },
                "source": {
                  "type": "string"
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "evidence": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "name-availability-check",
          "name": "Name Availability Check",
          "department": "Launch Checks",
          "highConfidenceOnly": true
        },
        "candidate": "agentbodega",
        "checkedAt": "2026-07-09T00:00:00.000Z",
        "summary": {
          "recommendation": "shortlist",
          "domainCounts": {
            "available": 1,
            "taken": 1,
            "unknown": 0
          },
          "handleCounts": {
            "available": 1,
            "taken": 0,
            "unknown": 0,
            "invalid": 0
          },
          "highConfidenceOnly": true
        },
        "domains": [
          {
            "domain": "agentbodega.com",
            "tld": "com",
            "status": "taken",
            "confidence": "high",
            "source": "dns_resolution",
            "checkedAt": "2026-07-09T00:00:00.000Z"
          },
          {
            "domain": "agentbodega.dev",
            "tld": "dev",
            "status": "available",
            "confidence": "high",
            "source": "rdap_not_found",
            "checkedAt": "2026-07-09T00:00:00.000Z"
          }
        ],
        "handles": [
          {
            "platform": "github",
            "handle": "agentbodega",
            "status": "available",
            "confidence": "high",
            "source": "http_not_found",
            "checkedAt": "2026-07-09T00:00:00.000Z"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "candidate": "agentbodega",
                "tlds": [
                  "com",
                  "dev"
                ],
                "handles": [
                  "github"
                ],
                "includeWarnings": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "name-availability-check",
                  "name": "Name Availability Check",
                  "department": "Launch Checks",
                  "highConfidenceOnly": true
                },
                "candidate": "agentbodega",
                "checkedAt": "2026-07-09T00:00:00.000Z",
                "summary": {
                  "recommendation": "shortlist",
                  "domainCounts": {
                    "available": 1,
                    "taken": 1,
                    "unknown": 0
                  },
                  "handleCounts": {
                    "available": 1,
                    "taken": 0,
                    "unknown": 0,
                    "invalid": 0
                  },
                  "highConfidenceOnly": true
                },
                "domains": [
                  {
                    "domain": "agentbodega.com",
                    "tld": "com",
                    "status": "taken",
                    "confidence": "high",
                    "source": "dns_resolution",
                    "checkedAt": "2026-07-09T00:00:00.000Z"
                  },
                  {
                    "domain": "agentbodega.dev",
                    "tld": "dev",
                    "status": "available",
                    "confidence": "high",
                    "source": "rdap_not_found",
                    "checkedAt": "2026-07-09T00:00:00.000Z"
                  }
                ],
                "handles": [
                  {
                    "platform": "github",
                    "handle": "agentbodega",
                    "status": "available",
                    "confidence": "high",
                    "source": "http_not_found",
                    "checkedAt": "2026-07-09T00:00:00.000Z"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/name/check",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "candidate"
                    ],
                    "properties": {
                      "candidate": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80,
                        "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @."
                      },
                      "tlds": {
                        "type": "array",
                        "maxItems": 10,
                        "default": [
                          "com",
                          "ai",
                          "dev",
                          "app",
                          "io",
                          "co",
                          "net",
                          "org",
                          "xyz",
                          "store"
                        ],
                        "items": {
                          "type": "string",
                          "enum": [
                            "com",
                            "ai",
                            "dev",
                            "app",
                            "io",
                            "co",
                            "net",
                            "org",
                            "xyz",
                            "store"
                          ],
                          "description": "Tlds item filter for Name Availability Check. Accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\". Constraints: accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"."
                        },
                        "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing."
                      },
                      "handles": {
                        "type": "array",
                        "maxItems": 1,
                        "default": [
                          "github"
                        ],
                        "items": {
                          "type": "string",
                          "enum": [
                            "github"
                          ],
                          "description": "Handles item filter for Name Availability Check. Accepted values: \"github\". Constraints: accepted values: \"github\"."
                        },
                        "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here."
                      },
                      "includeWarnings": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include actionability and legal/ownership warnings in the response."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "candidate",
                      "checkedAt",
                      "summary",
                      "domains",
                      "handles"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "candidate": {
                        "type": "string"
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "summary": {
                        "type": "object",
                        "required": [
                          "recommendation",
                          "domainCounts",
                          "handleCounts"
                        ],
                        "properties": {
                          "recommendation": {
                            "type": "string",
                            "enum": [
                              "shortlist",
                              "review",
                              "avoid"
                            ]
                          },
                          "domainCounts": {
                            "type": "object",
                            "additionalProperties": {
                              "type": "integer"
                            }
                          },
                          "handleCounts": {
                            "type": "object",
                            "additionalProperties": {
                              "type": "integer"
                            }
                          },
                          "highConfidenceOnly": {
                            "type": "boolean"
                          }
                        },
                        "additionalProperties": true
                      },
                      "domains": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "domain",
                            "tld",
                            "status",
                            "confidence",
                            "source",
                            "checkedAt"
                          ],
                          "properties": {
                            "domain": {
                              "type": "string"
                            },
                            "tld": {
                              "type": "string"
                            },
                            "status": {
                              "type": "string",
                              "enum": [
                                "available",
                                "taken",
                                "unknown"
                              ]
                            },
                            "confidence": {
                              "type": "string",
                              "enum": [
                                "high",
                                "low"
                              ]
                            },
                            "source": {
                              "type": "string"
                            },
                            "checkedAt": {
                              "type": "string",
                              "format": "date-time"
                            },
                            "evidence": {
                              "type": "object",
                              "additionalProperties": true
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "handles": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "platform",
                            "handle",
                            "status",
                            "confidence",
                            "source",
                            "checkedAt"
                          ],
                          "properties": {
                            "platform": {
                              "type": "string",
                              "enum": [
                                "github"
                              ]
                            },
                            "handle": {
                              "type": "string"
                            },
                            "status": {
                              "type": "string",
                              "enum": [
                                "available",
                                "taken",
                                "unknown",
                                "invalid"
                              ]
                            },
                            "confidence": {
                              "type": "string",
                              "enum": [
                                "high",
                                "low"
                              ]
                            },
                            "source": {
                              "type": "string"
                            },
                            "checkedAt": {
                              "type": "string",
                              "format": "date-time"
                            },
                            "evidence": {
                              "type": "object",
                              "additionalProperties": true
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "warnings": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "name-availability-check",
            "url": "https://agentbodega.store/api/name/check",
            "method": "POST",
            "description": "Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.",
            "longDescription": "Purpose: Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nBest use: Use this when an agent needs check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: candidate.\nOptional fields: tlds, handles, includeWarnings.\n\nAccepted fields:\n- candidate (required, string): Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @. Constraints: min length: 1; max length: 80.\n- tlds (optional, array): Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing. Constraints: default: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"; max items: 10.\n- handles (optional, array): Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here. Constraints: default: \"github\"; max items: 1.\n- includeWarnings (optional, boolean): Include actionability and legal/ownership warnings in the response. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"candidate\": \"agentbodega\",\n  \"tlds\": [\n    \"com\",\n    \"dev\"\n  ],\n  \"handles\": [\n    \"github\"\n  ],\n  \"includeWarnings\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Name Availability Check",
            "category": "launch-checks",
            "kind": "name-availability-tool",
            "tags": [
              "name-availability",
              "domain-availability",
              "github",
              "brand-check",
              "launch-check",
              "agent-tools",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "candidate"
              ],
              "optional": [
                "tlds",
                "handles",
                "includeWarnings"
              ],
              "fields": [
                {
                  "name": "candidate",
                  "type": "string",
                  "required": true,
                  "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @.",
                  "constraints": {
                    "minLength": 1,
                    "maxLength": 80
                  }
                },
                {
                  "name": "tlds",
                  "type": "array",
                  "required": false,
                  "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing.",
                  "constraints": {
                    "default": [
                      "com",
                      "ai",
                      "dev",
                      "app",
                      "io",
                      "co",
                      "net",
                      "org",
                      "xyz",
                      "store"
                    ],
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "handles",
                  "type": "array",
                  "required": false,
                  "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here.",
                  "constraints": {
                    "default": [
                      "github"
                    ],
                    "maxItems": 1
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "includeWarnings",
                  "type": "boolean",
                  "required": false,
                  "description": "Include actionability and legal/ownership warnings in the response.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "candidate": "agentbodega",
                "tlds": [
                  "com",
                  "dev"
                ],
                "handles": [
                  "github"
                ],
                "includeWarnings": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "candidate"
              ],
              "properties": {
                "candidate": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 80,
                  "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @."
                },
                "tlds": {
                  "type": "array",
                  "maxItems": 10,
                  "default": [
                    "com",
                    "ai",
                    "dev",
                    "app",
                    "io",
                    "co",
                    "net",
                    "org",
                    "xyz",
                    "store"
                  ],
                  "items": {
                    "type": "string",
                    "enum": [
                      "com",
                      "ai",
                      "dev",
                      "app",
                      "io",
                      "co",
                      "net",
                      "org",
                      "xyz",
                      "store"
                    ],
                    "description": "Tlds item filter for Name Availability Check. Accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\". Constraints: accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"."
                  },
                  "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing."
                },
                "handles": {
                  "type": "array",
                  "maxItems": 1,
                  "default": [
                    "github"
                  ],
                  "items": {
                    "type": "string",
                    "enum": [
                      "github"
                    ],
                    "description": "Handles item filter for Name Availability Check. Accepted values: \"github\". Constraints: accepted values: \"github\"."
                  },
                  "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here."
                },
                "includeWarnings": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include actionability and legal/ownership warnings in the response."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "candidate",
                "checkedAt",
                "summary",
                "domains",
                "handles"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "candidate": {
                  "type": "string"
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "summary": {
                  "type": "object",
                  "required": [
                    "recommendation",
                    "domainCounts",
                    "handleCounts"
                  ],
                  "properties": {
                    "recommendation": {
                      "type": "string",
                      "enum": [
                        "shortlist",
                        "review",
                        "avoid"
                      ]
                    },
                    "domainCounts": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "integer"
                      }
                    },
                    "handleCounts": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "integer"
                      }
                    },
                    "highConfidenceOnly": {
                      "type": "boolean"
                    }
                  },
                  "additionalProperties": true
                },
                "domains": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "domain",
                      "tld",
                      "status",
                      "confidence",
                      "source",
                      "checkedAt"
                    ],
                    "properties": {
                      "domain": {
                        "type": "string"
                      },
                      "tld": {
                        "type": "string"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "available",
                          "taken",
                          "unknown"
                        ]
                      },
                      "confidence": {
                        "type": "string",
                        "enum": [
                          "high",
                          "low"
                        ]
                      },
                      "source": {
                        "type": "string"
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "evidence": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "handles": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "platform",
                      "handle",
                      "status",
                      "confidence",
                      "source",
                      "checkedAt"
                    ],
                    "properties": {
                      "platform": {
                        "type": "string",
                        "enum": [
                          "github"
                        ]
                      },
                      "handle": {
                        "type": "string"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "available",
                          "taken",
                          "unknown",
                          "invalid"
                        ]
                      },
                      "confidence": {
                        "type": "string",
                        "enum": [
                          "high",
                          "low"
                        ]
                      },
                      "source": {
                        "type": "string"
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "evidence": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/name/check",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/name/check",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "launch-checks",
        "kind": "name-availability-tool",
        "taxonomy": {
          "departmentId": "launch-checks",
          "department": "Launch Checks",
          "aisleId": "name-availability",
          "aisle": "Name Availability",
          "shelfId": "quick-checks",
          "shelf": "Quick Checks",
          "offeringId": "name-availability-check",
          "offering": "Name Availability Check",
          "pathIds": [
            "launch-checks",
            "name-availability",
            "quick-checks",
            "name-availability-check"
          ],
          "pathLabels": [
            "Launch Checks",
            "Name Availability",
            "Quick Checks",
            "Name Availability Check"
          ],
          "taxonomyPath": "launch-checks.name-availability.quick-checks.name-availability-check",
          "layout": {
            "department": {
              "id": "launch-checks",
              "name": "Launch Checks"
            },
            "aisle": {
              "id": "name-availability",
              "name": "Name Availability"
            },
            "shelf": {
              "id": "quick-checks",
              "name": "Quick Checks"
            },
            "offering": {
              "id": "name-availability-check",
              "name": "Name Availability Check"
            },
            "pathIds": [
              "launch-checks",
              "name-availability",
              "quick-checks",
              "name-availability-check"
            ],
            "pathLabels": [
              "Launch Checks",
              "Name Availability",
              "Quick Checks",
              "Name Availability Check"
            ]
          }
        },
        "description": {
          "short": "Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.",
          "full": "Purpose: Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nBest use: Use this when an agent needs check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: candidate.\nOptional fields: tlds, handles, includeWarnings.\n\nAccepted fields:\n- candidate (required, string): Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @. Constraints: min length: 1; max length: 80.\n- tlds (optional, array): Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing. Constraints: default: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"; max items: 10.\n- handles (optional, array): Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here. Constraints: default: \"github\"; max items: 1.\n- includeWarnings (optional, boolean): Include actionability and legal/ownership warnings in the response. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"candidate\": \"agentbodega\",\n  \"tlds\": [\n    \"com\",\n    \"dev\"\n  ],\n  \"handles\": [\n    \"github\"\n  ],\n  \"includeWarnings\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "candidate"
          ],
          "properties": {
            "candidate": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @."
            },
            "tlds": {
              "type": "array",
              "maxItems": 10,
              "default": [
                "com",
                "ai",
                "dev",
                "app",
                "io",
                "co",
                "net",
                "org",
                "xyz",
                "store"
              ],
              "items": {
                "type": "string",
                "enum": [
                  "com",
                  "ai",
                  "dev",
                  "app",
                  "io",
                  "co",
                  "net",
                  "org",
                  "xyz",
                  "store"
                ],
                "description": "Tlds item filter for Name Availability Check. Accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\". Constraints: accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"."
              },
              "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing."
            },
            "handles": {
              "type": "array",
              "maxItems": 1,
              "default": [
                "github"
              ],
              "items": {
                "type": "string",
                "enum": [
                  "github"
                ],
                "description": "Handles item filter for Name Availability Check. Accepted values: \"github\". Constraints: accepted values: \"github\"."
              },
              "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here."
            },
            "includeWarnings": {
              "type": "boolean",
              "default": true,
              "description": "Include actionability and legal/ownership warnings in the response."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "candidate"
          ],
          "properties": {
            "candidate": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @."
            },
            "tlds": {
              "type": "array",
              "maxItems": 10,
              "default": [
                "com",
                "ai",
                "dev",
                "app",
                "io",
                "co",
                "net",
                "org",
                "xyz",
                "store"
              ],
              "items": {
                "type": "string",
                "enum": [
                  "com",
                  "ai",
                  "dev",
                  "app",
                  "io",
                  "co",
                  "net",
                  "org",
                  "xyz",
                  "store"
                ],
                "description": "Tlds item filter for Name Availability Check. Accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\". Constraints: accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"."
              },
              "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing."
            },
            "handles": {
              "type": "array",
              "maxItems": 1,
              "default": [
                "github"
              ],
              "items": {
                "type": "string",
                "enum": [
                  "github"
                ],
                "description": "Handles item filter for Name Availability Check. Accepted values: \"github\". Constraints: accepted values: \"github\"."
              },
              "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here."
            },
            "includeWarnings": {
              "type": "boolean",
              "default": true,
              "description": "Include actionability and legal/ownership warnings in the response."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "candidate"
          ],
          "optional": [
            "tlds",
            "handles",
            "includeWarnings"
          ],
          "fields": [
            {
              "name": "candidate",
              "type": "string",
              "required": true,
              "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @.",
              "constraints": {
                "minLength": 1,
                "maxLength": 80
              }
            },
            {
              "name": "tlds",
              "type": "array",
              "required": false,
              "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing.",
              "constraints": {
                "default": [
                  "com",
                  "ai",
                  "dev",
                  "app",
                  "io",
                  "co",
                  "net",
                  "org",
                  "xyz",
                  "store"
                ],
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "handles",
              "type": "array",
              "required": false,
              "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here.",
              "constraints": {
                "default": [
                  "github"
                ],
                "maxItems": 1
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "includeWarnings",
              "type": "boolean",
              "required": false,
              "description": "Include actionability and legal/ownership warnings in the response.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "candidate": "agentbodega",
            "tlds": [
              "com",
              "dev"
            ],
            "handles": [
              "github"
            ],
            "includeWarnings": true
          }
        },
        "exampleRequest": {
          "candidate": "agentbodega",
          "tlds": [
            "com",
            "dev"
          ],
          "handles": [
            "github"
          ],
          "includeWarnings": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "candidate",
            "checkedAt",
            "summary",
            "domains",
            "handles"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "candidate": {
              "type": "string"
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            },
            "summary": {
              "type": "object",
              "required": [
                "recommendation",
                "domainCounts",
                "handleCounts"
              ],
              "properties": {
                "recommendation": {
                  "type": "string",
                  "enum": [
                    "shortlist",
                    "review",
                    "avoid"
                  ]
                },
                "domainCounts": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  }
                },
                "handleCounts": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  }
                },
                "highConfidenceOnly": {
                  "type": "boolean"
                }
              },
              "additionalProperties": true
            },
            "domains": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "domain",
                  "tld",
                  "status",
                  "confidence",
                  "source",
                  "checkedAt"
                ],
                "properties": {
                  "domain": {
                    "type": "string"
                  },
                  "tld": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "available",
                      "taken",
                      "unknown"
                    ]
                  },
                  "confidence": {
                    "type": "string",
                    "enum": [
                      "high",
                      "low"
                    ]
                  },
                  "source": {
                    "type": "string"
                  },
                  "checkedAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "evidence": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "additionalProperties": true
              }
            },
            "handles": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "platform",
                  "handle",
                  "status",
                  "confidence",
                  "source",
                  "checkedAt"
                ],
                "properties": {
                  "platform": {
                    "type": "string",
                    "enum": [
                      "github"
                    ]
                  },
                  "handle": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "available",
                      "taken",
                      "unknown",
                      "invalid"
                    ]
                  },
                  "confidence": {
                    "type": "string",
                    "enum": [
                      "high",
                      "low"
                    ]
                  },
                  "source": {
                    "type": "string"
                  },
                  "checkedAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "evidence": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "additionalProperties": true
              }
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "candidate",
            "checkedAt",
            "summary",
            "domains",
            "handles"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "candidate": {
              "type": "string"
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            },
            "summary": {
              "type": "object",
              "required": [
                "recommendation",
                "domainCounts",
                "handleCounts"
              ],
              "properties": {
                "recommendation": {
                  "type": "string",
                  "enum": [
                    "shortlist",
                    "review",
                    "avoid"
                  ]
                },
                "domainCounts": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  }
                },
                "handleCounts": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  }
                },
                "highConfidenceOnly": {
                  "type": "boolean"
                }
              },
              "additionalProperties": true
            },
            "domains": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "domain",
                  "tld",
                  "status",
                  "confidence",
                  "source",
                  "checkedAt"
                ],
                "properties": {
                  "domain": {
                    "type": "string"
                  },
                  "tld": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "available",
                      "taken",
                      "unknown"
                    ]
                  },
                  "confidence": {
                    "type": "string",
                    "enum": [
                      "high",
                      "low"
                    ]
                  },
                  "source": {
                    "type": "string"
                  },
                  "checkedAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "evidence": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "additionalProperties": true
              }
            },
            "handles": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "platform",
                  "handle",
                  "status",
                  "confidence",
                  "source",
                  "checkedAt"
                ],
                "properties": {
                  "platform": {
                    "type": "string",
                    "enum": [
                      "github"
                    ]
                  },
                  "handle": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "available",
                      "taken",
                      "unknown",
                      "invalid"
                    ]
                  },
                  "confidence": {
                    "type": "string",
                    "enum": [
                      "high",
                      "low"
                    ]
                  },
                  "source": {
                    "type": "string"
                  },
                  "checkedAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "evidence": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "additionalProperties": true
              }
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "name-availability-check",
            "name": "Name Availability Check",
            "department": "Launch Checks",
            "highConfidenceOnly": true
          },
          "candidate": "agentbodega",
          "checkedAt": "2026-07-09T00:00:00.000Z",
          "summary": {
            "recommendation": "shortlist",
            "domainCounts": {
              "available": 1,
              "taken": 1,
              "unknown": 0
            },
            "handleCounts": {
              "available": 1,
              "taken": 0,
              "unknown": 0,
              "invalid": 0
            },
            "highConfidenceOnly": true
          },
          "domains": [
            {
              "domain": "agentbodega.com",
              "tld": "com",
              "status": "taken",
              "confidence": "high",
              "source": "dns_resolution",
              "checkedAt": "2026-07-09T00:00:00.000Z"
            },
            {
              "domain": "agentbodega.dev",
              "tld": "dev",
              "status": "available",
              "confidence": "high",
              "source": "rdap_not_found",
              "checkedAt": "2026-07-09T00:00:00.000Z"
            }
          ],
          "handles": [
            {
              "platform": "github",
              "handle": "agentbodega",
              "status": "available",
              "confidence": "high",
              "source": "http_not_found",
              "checkedAt": "2026-07-09T00:00:00.000Z"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/artifacts",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Temporary Hosted Artifact",
      "description": "Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.",
      "longDescription": "Purpose: Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nBest use: Use this when an agent needs create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: kind, content.\nOptional fields: contentType, ttlSeconds, filename.\n\nAccepted fields:\n- kind (required, string): Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".\n- content (required, any): Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json.\n- contentType (optional, string): Optional MIME type override.\n- ttlSeconds (optional, integer): Artifact lifetime in seconds. Constraints: default: 86400; min: 60; max: 604800.\n- filename (optional, string): Optional display filename. Constraints: max length: 120.\n\nExample request body:\n```json\n{\n  \"kind\": \"json\",\n  \"content\": {\n    \"ok\": true,\n    \"message\": \"hello agent\"\n  },\n  \"ttlSeconds\": 3600\n}\n```",
      "category": "agent-utilities",
      "kind": "http-json",
      "departmentId": "agent-utilities",
      "department": "Agent Utilities",
      "aisleId": "agent-artifacts",
      "aisle": "Agent Artifacts",
      "offeringId": "hosted-artifact",
      "offering": "Temporary Hosted Artifact",
      "pathIds": [
        "agent-utilities",
        "agent-artifacts",
        "hosted-artifact"
      ],
      "pathLabels": [
        "Agent Utilities",
        "Agent Artifacts",
        "Temporary Hosted Artifact"
      ],
      "taxonomyPath": "agent-utilities.agent-artifacts.hosted-artifact",
      "layout": {
        "department": {
          "id": "agent-utilities",
          "name": "Agent Utilities"
        },
        "aisle": {
          "id": "agent-artifacts",
          "name": "Agent Artifacts"
        },
        "offering": {
          "id": "hosted-artifact",
          "name": "Temporary Hosted Artifact"
        },
        "pathIds": [
          "agent-utilities",
          "agent-artifacts",
          "hosted-artifact"
        ],
        "pathLabels": [
          "Agent Utilities",
          "Agent Artifacts",
          "Temporary Hosted Artifact"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "artifact-hosting",
        "webhook-bin",
        "signed-url",
        "agent-tools"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "kind",
          "content"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "text",
              "json",
              "svg",
              "redirect"
            ],
            "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\"."
          },
          "content": {
            "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
          },
          "contentType": {
            "type": "string",
            "description": "Optional MIME type override."
          },
          "ttlSeconds": {
            "type": "integer",
            "minimum": 60,
            "maximum": 604800,
            "default": 86400,
            "description": "Artifact lifetime in seconds."
          },
          "filename": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional display filename."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "kind",
          "content"
        ],
        "optional": [
          "contentType",
          "ttlSeconds",
          "filename"
        ],
        "fields": [
          {
            "name": "kind",
            "type": "string",
            "required": true,
            "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".",
            "constraints": {
              "enum": [
                "text",
                "json",
                "svg",
                "redirect"
              ]
            }
          },
          {
            "name": "content",
            "type": "any",
            "required": true,
            "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
          },
          {
            "name": "contentType",
            "type": "string",
            "required": false,
            "description": "Optional MIME type override."
          },
          {
            "name": "ttlSeconds",
            "type": "integer",
            "required": false,
            "description": "Artifact lifetime in seconds.",
            "constraints": {
              "default": 86400,
              "minimum": 60,
              "maximum": 604800
            }
          },
          {
            "name": "filename",
            "type": "string",
            "required": false,
            "description": "Optional display filename.",
            "constraints": {
              "maxLength": 120
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "kind": "json",
          "content": {
            "ok": true,
            "message": "hello agent"
          },
          "ttlSeconds": 3600
        }
      },
      "exampleRequest": {
        "kind": "json",
        "content": {
          "ok": true,
          "message": "hello agent"
        },
        "ttlSeconds": 3600
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "artifactUrl",
          "expiresAt"
        ],
        "properties": {
          "artifactUrl": {
            "type": "string",
            "format": "uri"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "outputExample": {
        "artifactUrl": "signed hosted URL",
        "expiresAt": "2026-07-04T16:00:00.000Z",
        "bytes": 128
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "kind": "json",
                "content": {
                  "ok": true,
                  "message": "hello agent"
                },
                "ttlSeconds": 3600
              }
            },
            "output": {
              "type": "json",
              "example": {
                "artifactUrl": "signed hosted URL",
                "expiresAt": "2026-07-04T16:00:00.000Z",
                "bytes": 128
              }
            }
          },
          "routeTemplate": "/api/artifacts",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "kind",
                      "content"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "enum": [
                          "text",
                          "json",
                          "svg",
                          "redirect"
                        ],
                        "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\"."
                      },
                      "content": {
                        "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
                      },
                      "contentType": {
                        "type": "string",
                        "description": "Optional MIME type override."
                      },
                      "ttlSeconds": {
                        "type": "integer",
                        "minimum": 60,
                        "maximum": 604800,
                        "default": 86400,
                        "description": "Artifact lifetime in seconds."
                      },
                      "filename": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional display filename."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "artifactUrl",
                      "expiresAt"
                    ],
                    "properties": {
                      "artifactUrl": {
                        "type": "string",
                        "format": "uri"
                      },
                      "expiresAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    }
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "hosted-artifact",
            "url": "https://agentbodega.store/api/artifacts",
            "method": "POST",
            "description": "Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.",
            "longDescription": "Purpose: Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nBest use: Use this when an agent needs create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: kind, content.\nOptional fields: contentType, ttlSeconds, filename.\n\nAccepted fields:\n- kind (required, string): Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".\n- content (required, any): Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json.\n- contentType (optional, string): Optional MIME type override.\n- ttlSeconds (optional, integer): Artifact lifetime in seconds. Constraints: default: 86400; min: 60; max: 604800.\n- filename (optional, string): Optional display filename. Constraints: max length: 120.\n\nExample request body:\n```json\n{\n  \"kind\": \"json\",\n  \"content\": {\n    \"ok\": true,\n    \"message\": \"hello agent\"\n  },\n  \"ttlSeconds\": 3600\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Temporary Hosted Artifact",
            "category": "agent-utilities",
            "kind": "http-json",
            "tags": [
              "artifact-hosting",
              "webhook-bin",
              "signed-url",
              "agent-tools"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "kind",
                "content"
              ],
              "optional": [
                "contentType",
                "ttlSeconds",
                "filename"
              ],
              "fields": [
                {
                  "name": "kind",
                  "type": "string",
                  "required": true,
                  "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".",
                  "constraints": {
                    "enum": [
                      "text",
                      "json",
                      "svg",
                      "redirect"
                    ]
                  }
                },
                {
                  "name": "content",
                  "type": "any",
                  "required": true,
                  "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
                },
                {
                  "name": "contentType",
                  "type": "string",
                  "required": false,
                  "description": "Optional MIME type override."
                },
                {
                  "name": "ttlSeconds",
                  "type": "integer",
                  "required": false,
                  "description": "Artifact lifetime in seconds.",
                  "constraints": {
                    "default": 86400,
                    "minimum": 60,
                    "maximum": 604800
                  }
                },
                {
                  "name": "filename",
                  "type": "string",
                  "required": false,
                  "description": "Optional display filename.",
                  "constraints": {
                    "maxLength": 120
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "kind": "json",
                "content": {
                  "ok": true,
                  "message": "hello agent"
                },
                "ttlSeconds": 3600
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "kind",
                "content"
              ],
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "text",
                    "json",
                    "svg",
                    "redirect"
                  ],
                  "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\"."
                },
                "content": {
                  "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
                },
                "contentType": {
                  "type": "string",
                  "description": "Optional MIME type override."
                },
                "ttlSeconds": {
                  "type": "integer",
                  "minimum": 60,
                  "maximum": 604800,
                  "default": 86400,
                  "description": "Artifact lifetime in seconds."
                },
                "filename": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional display filename."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "artifactUrl",
                "expiresAt"
              ],
              "properties": {
                "artifactUrl": {
                  "type": "string",
                  "format": "uri"
                },
                "expiresAt": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/artifacts",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/artifacts",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-utilities",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "agent-utilities",
          "department": "Agent Utilities",
          "aisleId": "agent-artifacts",
          "aisle": "Agent Artifacts",
          "offeringId": "hosted-artifact",
          "offering": "Temporary Hosted Artifact",
          "pathIds": [
            "agent-utilities",
            "agent-artifacts",
            "hosted-artifact"
          ],
          "pathLabels": [
            "Agent Utilities",
            "Agent Artifacts",
            "Temporary Hosted Artifact"
          ],
          "taxonomyPath": "agent-utilities.agent-artifacts.hosted-artifact",
          "layout": {
            "department": {
              "id": "agent-utilities",
              "name": "Agent Utilities"
            },
            "aisle": {
              "id": "agent-artifacts",
              "name": "Agent Artifacts"
            },
            "offering": {
              "id": "hosted-artifact",
              "name": "Temporary Hosted Artifact"
            },
            "pathIds": [
              "agent-utilities",
              "agent-artifacts",
              "hosted-artifact"
            ],
            "pathLabels": [
              "Agent Utilities",
              "Agent Artifacts",
              "Temporary Hosted Artifact"
            ]
          }
        },
        "description": {
          "short": "Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.",
          "full": "Purpose: Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nBest use: Use this when an agent needs create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: kind, content.\nOptional fields: contentType, ttlSeconds, filename.\n\nAccepted fields:\n- kind (required, string): Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".\n- content (required, any): Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json.\n- contentType (optional, string): Optional MIME type override.\n- ttlSeconds (optional, integer): Artifact lifetime in seconds. Constraints: default: 86400; min: 60; max: 604800.\n- filename (optional, string): Optional display filename. Constraints: max length: 120.\n\nExample request body:\n```json\n{\n  \"kind\": \"json\",\n  \"content\": {\n    \"ok\": true,\n    \"message\": \"hello agent\"\n  },\n  \"ttlSeconds\": 3600\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "kind",
            "content"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "text",
                "json",
                "svg",
                "redirect"
              ],
              "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\"."
            },
            "content": {
              "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
            },
            "contentType": {
              "type": "string",
              "description": "Optional MIME type override."
            },
            "ttlSeconds": {
              "type": "integer",
              "minimum": 60,
              "maximum": 604800,
              "default": 86400,
              "description": "Artifact lifetime in seconds."
            },
            "filename": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional display filename."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "kind",
            "content"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "text",
                "json",
                "svg",
                "redirect"
              ],
              "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\"."
            },
            "content": {
              "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
            },
            "contentType": {
              "type": "string",
              "description": "Optional MIME type override."
            },
            "ttlSeconds": {
              "type": "integer",
              "minimum": 60,
              "maximum": 604800,
              "default": 86400,
              "description": "Artifact lifetime in seconds."
            },
            "filename": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional display filename."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "kind",
            "content"
          ],
          "optional": [
            "contentType",
            "ttlSeconds",
            "filename"
          ],
          "fields": [
            {
              "name": "kind",
              "type": "string",
              "required": true,
              "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".",
              "constraints": {
                "enum": [
                  "text",
                  "json",
                  "svg",
                  "redirect"
                ]
              }
            },
            {
              "name": "content",
              "type": "any",
              "required": true,
              "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
            },
            {
              "name": "contentType",
              "type": "string",
              "required": false,
              "description": "Optional MIME type override."
            },
            {
              "name": "ttlSeconds",
              "type": "integer",
              "required": false,
              "description": "Artifact lifetime in seconds.",
              "constraints": {
                "default": 86400,
                "minimum": 60,
                "maximum": 604800
              }
            },
            {
              "name": "filename",
              "type": "string",
              "required": false,
              "description": "Optional display filename.",
              "constraints": {
                "maxLength": 120
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "kind": "json",
            "content": {
              "ok": true,
              "message": "hello agent"
            },
            "ttlSeconds": 3600
          }
        },
        "exampleRequest": {
          "kind": "json",
          "content": {
            "ok": true,
            "message": "hello agent"
          },
          "ttlSeconds": 3600
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "artifactUrl",
            "expiresAt"
          ],
          "properties": {
            "artifactUrl": {
              "type": "string",
              "format": "uri"
            },
            "expiresAt": {
              "type": "string",
              "format": "date-time"
            }
          }
        },
        "output": {
          "type": "object",
          "required": [
            "artifactUrl",
            "expiresAt"
          ],
          "properties": {
            "artifactUrl": {
              "type": "string",
              "format": "uri"
            },
            "expiresAt": {
              "type": "string",
              "format": "date-time"
            }
          }
        },
        "outputExample": {
          "artifactUrl": "signed hosted URL",
          "expiresAt": "2026-07-04T16:00:00.000Z",
          "bytes": 128
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/audit/agent-launch",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Launch Audit",
      "description": "Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.",
      "longDescription": "Purpose: Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nBest use: Use this when an agent needs audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: siteType, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Launch Audit. Constraints: format: uri. Constraints: format: uri.\n- siteType (optional, string): Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"siteType\": \"all\",\n  \"includeEvidence\": true\n}\n```",
      "category": "agent-readiness",
      "kind": "http-json",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "http-json",
      "shelf": "Http Json",
      "offeringId": "agent-launch-audit",
      "offering": "Agent Launch Audit",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "http-json",
        "agent-launch-audit"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Http Json",
        "Agent Launch Audit"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-launch-audit",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "http-json",
          "name": "Http Json"
        },
        "offering": {
          "id": "agent-launch-audit",
          "name": "Agent Launch Audit"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "http-json",
          "agent-launch-audit"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Http Json",
          "Agent Launch Audit"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "launch-audit",
        "mcp",
        "agent-skills",
        "x402",
        "seo"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "30000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "30000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for Agent Launch Audit. Constraints: format: uri."
          },
          "siteType": {
            "type": "string",
            "enum": [
              "all",
              "content",
              "api"
            ],
            "default": "all",
            "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\"."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "siteType",
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for Agent Launch Audit. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "siteType",
            "type": "string",
            "required": false,
            "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".",
            "constraints": {
              "enum": [
                "all",
                "content",
                "api"
              ],
              "default": "all"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "siteType": "all",
          "includeEvidence": true
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "siteType": "all",
        "includeEvidence": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "summary": {
          "score": 86,
          "verdict": "agent-ready with fixes"
        },
        "checks": [
          {
            "name": "OpenAPI",
            "status": "pass"
          },
          {
            "name": "x402 discovery",
            "status": "pass"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "siteType": "all",
                "includeEvidence": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "summary": {
                  "score": 86,
                  "verdict": "agent-ready with fixes"
                },
                "checks": [
                  {
                    "name": "OpenAPI",
                    "status": "pass"
                  },
                  {
                    "name": "x402 discovery",
                    "status": "pass"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/audit/agent-launch",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for Agent Launch Audit. Constraints: format: uri."
                      },
                      "siteType": {
                        "type": "string",
                        "enum": [
                          "all",
                          "content",
                          "api"
                        ],
                        "default": "all",
                        "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\"."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-launch-audit",
            "url": "https://agentbodega.store/api/audit/agent-launch",
            "method": "POST",
            "description": "Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.",
            "longDescription": "Purpose: Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nBest use: Use this when an agent needs audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: siteType, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Launch Audit. Constraints: format: uri. Constraints: format: uri.\n- siteType (optional, string): Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"siteType\": \"all\",\n  \"includeEvidence\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Launch Audit",
            "category": "agent-readiness",
            "kind": "http-json",
            "tags": [
              "agent-readiness",
              "launch-audit",
              "mcp",
              "agent-skills",
              "x402",
              "seo"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "siteType",
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for Agent Launch Audit. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "siteType",
                  "type": "string",
                  "required": false,
                  "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".",
                  "constraints": {
                    "enum": [
                      "all",
                      "content",
                      "api"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "siteType": "all",
                "includeEvidence": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for Agent Launch Audit. Constraints: format: uri."
                },
                "siteType": {
                  "type": "string",
                  "enum": [
                    "all",
                    "content",
                    "api"
                  ],
                  "default": "all",
                  "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\"."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.03"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.03",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/audit/agent-launch",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.03"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/audit/agent-launch",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "http-json",
          "shelf": "Http Json",
          "offeringId": "agent-launch-audit",
          "offering": "Agent Launch Audit",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "http-json",
            "agent-launch-audit"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Http Json",
            "Agent Launch Audit"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-launch-audit",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "http-json",
              "name": "Http Json"
            },
            "offering": {
              "id": "agent-launch-audit",
              "name": "Agent Launch Audit"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "http-json",
              "agent-launch-audit"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Http Json",
              "Agent Launch Audit"
            ]
          }
        },
        "description": {
          "short": "Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.",
          "full": "Purpose: Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nBest use: Use this when an agent needs audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: siteType, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Launch Audit. Constraints: format: uri. Constraints: format: uri.\n- siteType (optional, string): Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"siteType\": \"all\",\n  \"includeEvidence\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Launch Audit. Constraints: format: uri."
            },
            "siteType": {
              "type": "string",
              "enum": [
                "all",
                "content",
                "api"
              ],
              "default": "all",
              "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Launch Audit. Constraints: format: uri."
            },
            "siteType": {
              "type": "string",
              "enum": [
                "all",
                "content",
                "api"
              ],
              "default": "all",
              "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "siteType",
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for Agent Launch Audit. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "siteType",
              "type": "string",
              "required": false,
              "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".",
              "constraints": {
                "enum": [
                  "all",
                  "content",
                  "api"
                ],
                "default": "all"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "siteType": "all",
            "includeEvidence": true
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "siteType": "all",
          "includeEvidence": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "summary": {
            "score": 86,
            "verdict": "agent-ready with fixes"
          },
          "checks": [
            {
              "name": "OpenAPI",
              "status": "pass"
            },
            {
              "name": "x402 discovery",
              "status": "pass"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/check/agent-discoverability",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Discoverability Check",
      "description": "Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.",
      "longDescription": "Purpose: Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nBest use: Use this when an agent needs check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Discoverability Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
      "category": "agent-readiness",
      "kind": "utility",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "utility",
      "shelf": "Utility",
      "offeringId": "agent-discoverability-check",
      "offering": "Agent Discoverability Check",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "utility",
        "agent-discoverability-check"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Utility",
        "Agent Discoverability Check"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-discoverability-check",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "utility",
          "name": "Utility"
        },
        "offering": {
          "id": "agent-discoverability-check",
          "name": "Agent Discoverability Check"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "utility",
          "agent-discoverability-check"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Utility",
          "Agent Discoverability Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "robots",
        "sitemap",
        "llms",
        "markdown",
        "link-headers"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for Agent Discoverability Check. Constraints: format: uri."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for Agent Discoverability Check. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeEvidence": true
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeEvidence": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "summary": {
          "score": 78
        },
        "checks": [
          {
            "name": "robots.txt",
            "status": "pass"
          },
          {
            "name": "sitemap",
            "status": "pass"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "summary": {
                  "score": 78
                },
                "checks": [
                  {
                    "name": "robots.txt",
                    "status": "pass"
                  },
                  {
                    "name": "sitemap",
                    "status": "pass"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/check/agent-discoverability",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for Agent Discoverability Check. Constraints: format: uri."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-discoverability-check",
            "url": "https://agentbodega.store/api/check/agent-discoverability",
            "method": "POST",
            "description": "Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.",
            "longDescription": "Purpose: Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nBest use: Use this when an agent needs check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Discoverability Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Discoverability Check",
            "category": "agent-readiness",
            "kind": "utility",
            "tags": [
              "agent-readiness",
              "robots",
              "sitemap",
              "llms",
              "markdown",
              "link-headers"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for Agent Discoverability Check. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for Agent Discoverability Check. Constraints: format: uri."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/check/agent-discoverability",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/check/agent-discoverability",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "utility",
          "shelf": "Utility",
          "offeringId": "agent-discoverability-check",
          "offering": "Agent Discoverability Check",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "utility",
            "agent-discoverability-check"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Utility",
            "Agent Discoverability Check"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-discoverability-check",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "utility",
              "name": "Utility"
            },
            "offering": {
              "id": "agent-discoverability-check",
              "name": "Agent Discoverability Check"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "utility",
              "agent-discoverability-check"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Utility",
              "Agent Discoverability Check"
            ]
          }
        },
        "description": {
          "short": "Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.",
          "full": "Purpose: Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nBest use: Use this when an agent needs check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Discoverability Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Discoverability Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Discoverability Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for Agent Discoverability Check. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeEvidence": true
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeEvidence": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "summary": {
            "score": 78
          },
          "checks": [
            {
              "name": "robots.txt",
              "status": "pass"
            },
            {
              "name": "sitemap",
              "status": "pass"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/check/agent-protocols",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Protocol Discovery Check",
      "description": "Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.",
      "longDescription": "Purpose: Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nBest use: Use this when an agent needs check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Protocol Discovery Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
      "category": "agent-readiness",
      "kind": "utility",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "utility",
      "shelf": "Utility",
      "offeringId": "agent-protocol-check",
      "offering": "Agent Protocol Discovery Check",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "utility",
        "agent-protocol-check"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Utility",
        "Agent Protocol Discovery Check"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-protocol-check",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "utility",
          "name": "Utility"
        },
        "offering": {
          "id": "agent-protocol-check",
          "name": "Agent Protocol Discovery Check"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "utility",
          "agent-protocol-check"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Utility",
          "Agent Protocol Discovery Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "openapi",
        "mcp",
        "agent-skills",
        "oauth",
        "a2a",
        "webmcp"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "20000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "20000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeEvidence": true
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeEvidence": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "summary": {
          "score": 82
        },
        "checks": [
          {
            "name": "OpenAPI",
            "status": "pass"
          },
          {
            "name": "MCP card",
            "status": "neutral"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "summary": {
                  "score": 82
                },
                "checks": [
                  {
                    "name": "OpenAPI",
                    "status": "pass"
                  },
                  {
                    "name": "MCP card",
                    "status": "neutral"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/check/agent-protocols",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-protocol-check",
            "url": "https://agentbodega.store/api/check/agent-protocols",
            "method": "POST",
            "description": "Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.",
            "longDescription": "Purpose: Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nBest use: Use this when an agent needs check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Protocol Discovery Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Protocol Discovery Check",
            "category": "agent-readiness",
            "kind": "utility",
            "tags": [
              "agent-readiness",
              "openapi",
              "mcp",
              "agent-skills",
              "oauth",
              "a2a",
              "webmcp"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.02"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.02",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/check/agent-protocols",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.02"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/check/agent-protocols",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "utility",
          "shelf": "Utility",
          "offeringId": "agent-protocol-check",
          "offering": "Agent Protocol Discovery Check",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "utility",
            "agent-protocol-check"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Utility",
            "Agent Protocol Discovery Check"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-protocol-check",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "utility",
              "name": "Utility"
            },
            "offering": {
              "id": "agent-protocol-check",
              "name": "Agent Protocol Discovery Check"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "utility",
              "agent-protocol-check"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Utility",
              "Agent Protocol Discovery Check"
            ]
          }
        },
        "description": {
          "short": "Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.",
          "full": "Purpose: Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nBest use: Use this when an agent needs check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Protocol Discovery Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeEvidence": true
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeEvidence": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "summary": {
            "score": 82
          },
          "checks": [
            {
              "name": "OpenAPI",
              "status": "pass"
            },
            {
              "name": "MCP card",
              "status": "neutral"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/check/agent-commerce",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Commerce Check",
      "description": "Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.",
      "longDescription": "Purpose: Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nBest use: Use this when an agent needs check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Commerce Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
      "category": "agent-readiness",
      "kind": "utility",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "utility",
      "shelf": "Utility",
      "offeringId": "agent-commerce-check",
      "offering": "Agent Commerce Check",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "utility",
        "agent-commerce-check"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Utility",
        "Agent Commerce Check"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-commerce-check",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "utility",
          "name": "Utility"
        },
        "offering": {
          "id": "agent-commerce-check",
          "name": "Agent Commerce Check"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "utility",
          "agent-commerce-check"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Utility",
          "Agent Commerce Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "x402",
        "mpp",
        "ucp",
        "acp",
        "commerce"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for Agent Commerce Check. Constraints: format: uri."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for Agent Commerce Check. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeEvidence": true
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeEvidence": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "summary": {
          "score": 70
        },
        "checks": [
          {
            "name": "x402",
            "status": "pass"
          },
          {
            "name": "payment hints",
            "status": "neutral"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "summary": {
                  "score": 70
                },
                "checks": [
                  {
                    "name": "x402",
                    "status": "pass"
                  },
                  {
                    "name": "payment hints",
                    "status": "neutral"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/check/agent-commerce",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for Agent Commerce Check. Constraints: format: uri."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-commerce-check",
            "url": "https://agentbodega.store/api/check/agent-commerce",
            "method": "POST",
            "description": "Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.",
            "longDescription": "Purpose: Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nBest use: Use this when an agent needs check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Commerce Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Commerce Check",
            "category": "agent-readiness",
            "kind": "utility",
            "tags": [
              "agent-readiness",
              "x402",
              "mpp",
              "ucp",
              "acp",
              "commerce"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for Agent Commerce Check. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for Agent Commerce Check. Constraints: format: uri."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/check/agent-commerce",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/check/agent-commerce",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "utility",
          "shelf": "Utility",
          "offeringId": "agent-commerce-check",
          "offering": "Agent Commerce Check",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "utility",
            "agent-commerce-check"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Utility",
            "Agent Commerce Check"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-commerce-check",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "utility",
              "name": "Utility"
            },
            "offering": {
              "id": "agent-commerce-check",
              "name": "Agent Commerce Check"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "utility",
              "agent-commerce-check"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Utility",
              "Agent Commerce Check"
            ]
          }
        },
        "description": {
          "short": "Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.",
          "full": "Purpose: Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nBest use: Use this when an agent needs check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Commerce Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Commerce Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Commerce Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for Agent Commerce Check. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeEvidence": true
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeEvidence": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "summary": {
            "score": 70
          },
          "checks": [
            {
              "name": "x402",
              "status": "pass"
            },
            {
              "name": "payment hints",
              "status": "neutral"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/audit/agent-batch",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Readiness Batch Audit",
      "description": "Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.",
      "longDescription": "Purpose: Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nBest use: Use this when an agent needs run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: urls.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- urls (required, array): List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5. Constraints: min items: 1; max items: 5.\n- scope (optional, string): Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"urls\": [\n    \"https://example.com\",\n    \"https://example.org\"\n  ],\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```",
      "category": "agent-readiness",
      "kind": "http-json",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "http-json",
      "shelf": "Http Json",
      "offeringId": "agent-readiness-batch",
      "offering": "Agent Readiness Batch Audit",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "http-json",
        "agent-readiness-batch"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Http Json",
        "Agent Readiness Batch Audit"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-readiness-batch",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "http-json",
          "name": "Http Json"
        },
        "offering": {
          "id": "agent-readiness-batch",
          "name": "Agent Readiness Batch Audit"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "http-json",
          "agent-readiness-batch"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Http Json",
          "Agent Readiness Batch Audit"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "batch-audit",
        "launch-audit",
        "seo",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "50000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "50000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "urls"
        ],
        "properties": {
          "urls": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri",
              "description": "Urls item value for Agent Readiness Batch Audit. Constraints: format: uri."
            },
            "minItems": 1,
            "maxItems": 5,
            "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5."
          },
          "scope": {
            "type": "string",
            "enum": [
              "all",
              "discoverability",
              "protocols",
              "commerce"
            ],
            "default": "all",
            "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "urls"
        ],
        "optional": [
          "scope",
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "urls",
            "type": "array",
            "required": true,
            "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5.",
            "constraints": {
              "minItems": 1,
              "maxItems": 5
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "scope",
            "type": "string",
            "required": false,
            "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
            "constraints": {
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "urls": [
            "https://example.com",
            "https://example.org"
          ],
          "scope": "all",
          "includeEvidence": false
        }
      },
      "exampleRequest": {
        "urls": [
          "https://example.com",
          "https://example.org"
        ],
        "scope": "all",
        "includeEvidence": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "summary": {
          "compared": 3,
          "best": "example.com"
        },
        "results": [
          {
            "site": "example.com",
            "score": 86
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "urls": [
                  "https://example.com",
                  "https://example.org"
                ],
                "scope": "all",
                "includeEvidence": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "summary": {
                  "compared": 3,
                  "best": "example.com"
                },
                "results": [
                  {
                    "site": "example.com",
                    "score": 86
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/audit/agent-batch",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "urls"
                    ],
                    "properties": {
                      "urls": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "uri",
                          "description": "Urls item value for Agent Readiness Batch Audit. Constraints: format: uri."
                        },
                        "minItems": 1,
                        "maxItems": 5,
                        "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5."
                      },
                      "scope": {
                        "type": "string",
                        "enum": [
                          "all",
                          "discoverability",
                          "protocols",
                          "commerce"
                        ],
                        "default": "all",
                        "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-readiness-batch",
            "url": "https://agentbodega.store/api/audit/agent-batch",
            "method": "POST",
            "description": "Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.",
            "longDescription": "Purpose: Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nBest use: Use this when an agent needs run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: urls.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- urls (required, array): List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5. Constraints: min items: 1; max items: 5.\n- scope (optional, string): Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"urls\": [\n    \"https://example.com\",\n    \"https://example.org\"\n  ],\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Readiness Batch Audit",
            "category": "agent-readiness",
            "kind": "http-json",
            "tags": [
              "agent-readiness",
              "batch-audit",
              "launch-audit",
              "seo",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "urls"
              ],
              "optional": [
                "scope",
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "urls",
                  "type": "array",
                  "required": true,
                  "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5.",
                  "constraints": {
                    "minItems": 1,
                    "maxItems": 5
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "scope",
                  "type": "string",
                  "required": false,
                  "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
                  "constraints": {
                    "enum": [
                      "all",
                      "discoverability",
                      "protocols",
                      "commerce"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "urls": [
                  "https://example.com",
                  "https://example.org"
                ],
                "scope": "all",
                "includeEvidence": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "urls"
              ],
              "properties": {
                "urls": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uri",
                    "description": "Urls item value for Agent Readiness Batch Audit. Constraints: format: uri."
                  },
                  "minItems": 1,
                  "maxItems": 5,
                  "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5."
                },
                "scope": {
                  "type": "string",
                  "enum": [
                    "all",
                    "discoverability",
                    "protocols",
                    "commerce"
                  ],
                  "default": "all",
                  "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.05"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.05",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/audit/agent-batch",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.05"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/audit/agent-batch",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "http-json",
          "shelf": "Http Json",
          "offeringId": "agent-readiness-batch",
          "offering": "Agent Readiness Batch Audit",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "http-json",
            "agent-readiness-batch"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Http Json",
            "Agent Readiness Batch Audit"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-readiness-batch",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "http-json",
              "name": "Http Json"
            },
            "offering": {
              "id": "agent-readiness-batch",
              "name": "Agent Readiness Batch Audit"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "http-json",
              "agent-readiness-batch"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Http Json",
              "Agent Readiness Batch Audit"
            ]
          }
        },
        "description": {
          "short": "Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.",
          "full": "Purpose: Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nBest use: Use this when an agent needs run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: urls.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- urls (required, array): List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5. Constraints: min items: 1; max items: 5.\n- scope (optional, string): Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"urls\": [\n    \"https://example.com\",\n    \"https://example.org\"\n  ],\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "urls"
          ],
          "properties": {
            "urls": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uri",
                "description": "Urls item value for Agent Readiness Batch Audit. Constraints: format: uri."
              },
              "minItems": 1,
              "maxItems": 5,
              "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5."
            },
            "scope": {
              "type": "string",
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all",
              "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "urls"
          ],
          "properties": {
            "urls": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uri",
                "description": "Urls item value for Agent Readiness Batch Audit. Constraints: format: uri."
              },
              "minItems": 1,
              "maxItems": 5,
              "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5."
            },
            "scope": {
              "type": "string",
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all",
              "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "urls"
          ],
          "optional": [
            "scope",
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "urls",
              "type": "array",
              "required": true,
              "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5.",
              "constraints": {
                "minItems": 1,
                "maxItems": 5
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "scope",
              "type": "string",
              "required": false,
              "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
              "constraints": {
                "enum": [
                  "all",
                  "discoverability",
                  "protocols",
                  "commerce"
                ],
                "default": "all"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "urls": [
              "https://example.com",
              "https://example.org"
            ],
            "scope": "all",
            "includeEvidence": false
          }
        },
        "exampleRequest": {
          "urls": [
            "https://example.com",
            "https://example.org"
          ],
          "scope": "all",
          "includeEvidence": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "summary": {
            "compared": 3,
            "best": "example.com"
          },
          "results": [
            {
              "site": "example.com",
              "score": 86
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/badge/agent-ready",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Ready Badge",
      "description": "Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.",
      "longDescription": "Purpose: Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nBest use: Use this when an agent needs generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Ready Badge. Constraints: format: uri. Constraints: format: uri.\n- scope (optional, string): Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```",
      "category": "agent-readiness",
      "kind": "http-json",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "http-json",
      "shelf": "Http Json",
      "offeringId": "agent-ready-badge",
      "offering": "Agent Ready Badge",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "http-json",
        "agent-ready-badge"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Http Json",
        "Agent Ready Badge"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-ready-badge",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "http-json",
          "name": "Http Json"
        },
        "offering": {
          "id": "agent-ready-badge",
          "name": "Agent Ready Badge"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "http-json",
          "agent-ready-badge"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Http Json",
          "Agent Ready Badge"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "badge",
        "svg",
        "launch-audit"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for Agent Ready Badge. Constraints: format: uri."
          },
          "scope": {
            "type": "string",
            "enum": [
              "all",
              "discoverability",
              "protocols",
              "commerce"
            ],
            "default": "all",
            "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "scope",
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for Agent Ready Badge. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "scope",
            "type": "string",
            "required": false,
            "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
            "constraints": {
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "scope": "all",
          "includeEvidence": false
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "scope": "all",
        "includeEvidence": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "score": 86,
        "badgeSvg": "<svg>...</svg>",
        "summary": {
          "verdict": "agent-ready"
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "scope": "all",
                "includeEvidence": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "score": 86,
                "badgeSvg": "<svg>...</svg>",
                "summary": {
                  "verdict": "agent-ready"
                }
              }
            }
          },
          "routeTemplate": "/api/badge/agent-ready",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for Agent Ready Badge. Constraints: format: uri."
                      },
                      "scope": {
                        "type": "string",
                        "enum": [
                          "all",
                          "discoverability",
                          "protocols",
                          "commerce"
                        ],
                        "default": "all",
                        "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-ready-badge",
            "url": "https://agentbodega.store/api/badge/agent-ready",
            "method": "POST",
            "description": "Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.",
            "longDescription": "Purpose: Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nBest use: Use this when an agent needs generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Ready Badge. Constraints: format: uri. Constraints: format: uri.\n- scope (optional, string): Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Ready Badge",
            "category": "agent-readiness",
            "kind": "http-json",
            "tags": [
              "agent-readiness",
              "badge",
              "svg",
              "launch-audit"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "scope",
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for Agent Ready Badge. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "scope",
                  "type": "string",
                  "required": false,
                  "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
                  "constraints": {
                    "enum": [
                      "all",
                      "discoverability",
                      "protocols",
                      "commerce"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "scope": "all",
                "includeEvidence": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for Agent Ready Badge. Constraints: format: uri."
                },
                "scope": {
                  "type": "string",
                  "enum": [
                    "all",
                    "discoverability",
                    "protocols",
                    "commerce"
                  ],
                  "default": "all",
                  "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/badge/agent-ready",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/badge/agent-ready",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "http-json",
          "shelf": "Http Json",
          "offeringId": "agent-ready-badge",
          "offering": "Agent Ready Badge",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "http-json",
            "agent-ready-badge"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Http Json",
            "Agent Ready Badge"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-ready-badge",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "http-json",
              "name": "Http Json"
            },
            "offering": {
              "id": "agent-ready-badge",
              "name": "Agent Ready Badge"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "http-json",
              "agent-ready-badge"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Http Json",
              "Agent Ready Badge"
            ]
          }
        },
        "description": {
          "short": "Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.",
          "full": "Purpose: Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nBest use: Use this when an agent needs generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Ready Badge. Constraints: format: uri. Constraints: format: uri.\n- scope (optional, string): Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Ready Badge. Constraints: format: uri."
            },
            "scope": {
              "type": "string",
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all",
              "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Ready Badge. Constraints: format: uri."
            },
            "scope": {
              "type": "string",
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all",
              "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "scope",
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for Agent Ready Badge. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "scope",
              "type": "string",
              "required": false,
              "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
              "constraints": {
                "enum": [
                  "all",
                  "discoverability",
                  "protocols",
                  "commerce"
                ],
                "default": "all"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "scope": "all",
            "includeEvidence": false
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "scope": "all",
          "includeEvidence": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "score": 86,
          "badgeSvg": "<svg>...</svg>",
          "summary": {
            "verdict": "agent-ready"
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/package/x402-directory",
      "type": "http",
      "x402Version": 2,
      "serviceName": "x402 Directory Listing Pack",
      "description": "Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.",
      "longDescription": "Purpose: Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nBest use: Use this when an agent needs build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: name, tags.\n\nAccepted fields:\n- url (required, string): Url value for x402 Directory Listing Pack. Constraints: format: uri. Constraints: format: uri.\n- name (optional, string): Name value for x402 Directory Listing Pack. Constraints: max length: 80. Constraints: max length: 80.\n- tags (optional, array): List of tags values for x402 Directory Listing Pack. Constraints: max items: 12. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"name\": \"Example x402 API\",\n  \"tags\": [\n    \"x402\",\n    \"agents\"\n  ]\n}\n```",
      "category": "x402-tools",
      "kind": "http-json",
      "departmentId": "x402-tools",
      "department": "x402 Tools",
      "aisleId": "payment-discovery",
      "aisle": "Payment Discovery",
      "shelfId": "directory-packaging",
      "shelf": "Directory Packaging",
      "offeringId": "x402-directory-pack",
      "offering": "x402 Directory Listing Pack",
      "pathIds": [
        "x402-tools",
        "payment-discovery",
        "directory-packaging",
        "x402-directory-pack"
      ],
      "pathLabels": [
        "x402 Tools",
        "Payment Discovery",
        "Directory Packaging",
        "x402 Directory Listing Pack"
      ],
      "taxonomyPath": "x402-tools.payment-discovery.directory-packaging.x402-directory-pack",
      "layout": {
        "department": {
          "id": "x402-tools",
          "name": "x402 Tools"
        },
        "aisle": {
          "id": "payment-discovery",
          "name": "Payment Discovery"
        },
        "shelf": {
          "id": "directory-packaging",
          "name": "Directory Packaging"
        },
        "offering": {
          "id": "x402-directory-pack",
          "name": "x402 Directory Listing Pack"
        },
        "pathIds": [
          "x402-tools",
          "payment-discovery",
          "directory-packaging",
          "x402-directory-pack"
        ],
        "pathLabels": [
          "x402 Tools",
          "Payment Discovery",
          "Directory Packaging",
          "x402 Directory Listing Pack"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "x402",
        "directory-listing",
        "marketplace",
        "bazaar",
        "discovery"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri."
          },
          "name": {
            "type": "string",
            "maxLength": 80,
            "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Tags item value for x402 Directory Listing Pack."
            },
            "maxItems": 12,
            "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "name",
          "tags"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "name",
            "type": "string",
            "required": false,
            "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "tags",
            "type": "array",
            "required": false,
            "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "name": "Example x402 API",
          "tags": [
            "x402",
            "agents"
          ]
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "name": "Example x402 API",
        "tags": [
          "x402",
          "agents"
        ]
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "listing": {
          "payableResourceCount": 12,
          "score": 91
        },
        "files": [
          {
            "name": "openapi.json"
          },
          {
            "name": "x402 discovery"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "name": "Example x402 API",
                "tags": [
                  "x402",
                  "agents"
                ]
              }
            },
            "output": {
              "type": "json",
              "example": {
                "listing": {
                  "payableResourceCount": 12,
                  "score": 91
                },
                "files": [
                  {
                    "name": "openapi.json"
                  },
                  {
                    "name": "x402 discovery"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/package/x402-directory",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri."
                      },
                      "name": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80."
                      },
                      "tags": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Tags item value for x402 Directory Listing Pack."
                        },
                        "maxItems": 12,
                        "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x402-directory-pack",
            "url": "https://agentbodega.store/api/package/x402-directory",
            "method": "POST",
            "description": "Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.",
            "longDescription": "Purpose: Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nBest use: Use this when an agent needs build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: name, tags.\n\nAccepted fields:\n- url (required, string): Url value for x402 Directory Listing Pack. Constraints: format: uri. Constraints: format: uri.\n- name (optional, string): Name value for x402 Directory Listing Pack. Constraints: max length: 80. Constraints: max length: 80.\n- tags (optional, array): List of tags values for x402 Directory Listing Pack. Constraints: max items: 12. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"name\": \"Example x402 API\",\n  \"tags\": [\n    \"x402\",\n    \"agents\"\n  ]\n}\n```",
            "mimeType": "application/json",
            "serviceName": "x402 Directory Listing Pack",
            "category": "x402-tools",
            "kind": "http-json",
            "tags": [
              "x402",
              "directory-listing",
              "marketplace",
              "bazaar",
              "discovery"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "name",
                "tags"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "name",
                  "type": "string",
                  "required": false,
                  "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "tags",
                  "type": "array",
                  "required": false,
                  "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "name": "Example x402 API",
                "tags": [
                  "x402",
                  "agents"
                ]
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri."
                },
                "name": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80."
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Tags item value for x402 Directory Listing Pack."
                  },
                  "maxItems": 12,
                  "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/package/x402-directory",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/package/x402-directory",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "x402-tools",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "x402-tools",
          "department": "x402 Tools",
          "aisleId": "payment-discovery",
          "aisle": "Payment Discovery",
          "shelfId": "directory-packaging",
          "shelf": "Directory Packaging",
          "offeringId": "x402-directory-pack",
          "offering": "x402 Directory Listing Pack",
          "pathIds": [
            "x402-tools",
            "payment-discovery",
            "directory-packaging",
            "x402-directory-pack"
          ],
          "pathLabels": [
            "x402 Tools",
            "Payment Discovery",
            "Directory Packaging",
            "x402 Directory Listing Pack"
          ],
          "taxonomyPath": "x402-tools.payment-discovery.directory-packaging.x402-directory-pack",
          "layout": {
            "department": {
              "id": "x402-tools",
              "name": "x402 Tools"
            },
            "aisle": {
              "id": "payment-discovery",
              "name": "Payment Discovery"
            },
            "shelf": {
              "id": "directory-packaging",
              "name": "Directory Packaging"
            },
            "offering": {
              "id": "x402-directory-pack",
              "name": "x402 Directory Listing Pack"
            },
            "pathIds": [
              "x402-tools",
              "payment-discovery",
              "directory-packaging",
              "x402-directory-pack"
            ],
            "pathLabels": [
              "x402 Tools",
              "Payment Discovery",
              "Directory Packaging",
              "x402 Directory Listing Pack"
            ]
          }
        },
        "description": {
          "short": "Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.",
          "full": "Purpose: Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nBest use: Use this when an agent needs build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: name, tags.\n\nAccepted fields:\n- url (required, string): Url value for x402 Directory Listing Pack. Constraints: format: uri. Constraints: format: uri.\n- name (optional, string): Name value for x402 Directory Listing Pack. Constraints: max length: 80. Constraints: max length: 80.\n- tags (optional, array): List of tags values for x402 Directory Listing Pack. Constraints: max items: 12. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"name\": \"Example x402 API\",\n  \"tags\": [\n    \"x402\",\n    \"agents\"\n  ]\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri."
            },
            "name": {
              "type": "string",
              "maxLength": 80,
              "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80."
            },
            "tags": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Tags item value for x402 Directory Listing Pack."
              },
              "maxItems": 12,
              "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri."
            },
            "name": {
              "type": "string",
              "maxLength": 80,
              "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80."
            },
            "tags": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Tags item value for x402 Directory Listing Pack."
              },
              "maxItems": 12,
              "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "name",
            "tags"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "name",
              "type": "string",
              "required": false,
              "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "tags",
              "type": "array",
              "required": false,
              "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "name": "Example x402 API",
            "tags": [
              "x402",
              "agents"
            ]
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "name": "Example x402 API",
          "tags": [
            "x402",
            "agents"
          ]
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "listing": {
            "payableResourceCount": 12,
            "score": 91
          },
          "files": [
            {
              "name": "openapi.json"
            },
            {
              "name": "x402 discovery"
            }
          ]
        }
      },
      "configured": true
    }
  ],
  "endpoints": [
    {
      "resource": "https://agentbodega.store/api/inspect/x402",
      "type": "http",
      "x402Version": 2,
      "serviceName": "x402 Endpoint Inspector",
      "description": "Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.",
      "longDescription": "Purpose: Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nBest use: Use this when an agent needs inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: method, headers, body, timeoutMs.\n\nAccepted fields:\n- url (required, string): Url value for x402 Endpoint Inspector. Constraints: format: uri. Constraints: format: uri.\n- method (optional, string): Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".\n- headers (optional, object): Headers object for configuring x402 Endpoint Inspector.\n- body (optional, object): Body object for configuring x402 Endpoint Inspector.\n- timeoutMs (optional, integer): Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000. Constraints: default: 5000; min: 500; max: 8000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com/api/paid\"\n}\n```",
      "category": "x402-tools",
      "kind": "http-json",
      "departmentId": "x402-tools",
      "department": "x402 Tools",
      "aisleId": "payment-discovery",
      "aisle": "Payment Discovery",
      "shelfId": "endpoint-inspection",
      "shelf": "Endpoint Inspection",
      "offeringId": "x402-inspector",
      "offering": "x402 Endpoint Inspector",
      "pathIds": [
        "x402-tools",
        "payment-discovery",
        "endpoint-inspection",
        "x402-inspector"
      ],
      "pathLabels": [
        "x402 Tools",
        "Payment Discovery",
        "Endpoint Inspection",
        "x402 Endpoint Inspector"
      ],
      "taxonomyPath": "x402-tools.payment-discovery.endpoint-inspection.x402-inspector",
      "layout": {
        "department": {
          "id": "x402-tools",
          "name": "x402 Tools"
        },
        "aisle": {
          "id": "payment-discovery",
          "name": "Payment Discovery"
        },
        "shelf": {
          "id": "endpoint-inspection",
          "name": "Endpoint Inspection"
        },
        "offering": {
          "id": "x402-inspector",
          "name": "x402 Endpoint Inspector"
        },
        "pathIds": [
          "x402-tools",
          "payment-discovery",
          "endpoint-inspection",
          "x402-inspector"
        ],
        "pathLabels": [
          "x402 Tools",
          "Payment Discovery",
          "Endpoint Inspection",
          "x402 Endpoint Inspector"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "x402",
        "inspection",
        "agent-tools",
        "bazaar",
        "openapi"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri."
          },
          "method": {
            "type": "string",
            "enum": [
              "GET",
              "HEAD",
              "POST"
            ],
            "default": "GET",
            "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\"."
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Headers object for configuring x402 Endpoint Inspector."
          },
          "body": {
            "type": "object",
            "additionalProperties": true,
            "description": "Body object for configuring x402 Endpoint Inspector."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 500,
            "maximum": 8000,
            "default": 5000,
            "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "method",
          "headers",
          "body",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "method",
            "type": "string",
            "required": false,
            "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".",
            "constraints": {
              "enum": [
                "GET",
                "HEAD",
                "POST"
              ],
              "default": "GET"
            }
          },
          {
            "name": "headers",
            "type": "object",
            "required": false,
            "description": "Headers object for configuring x402 Endpoint Inspector."
          },
          {
            "name": "body",
            "type": "object",
            "required": false,
            "description": "Body object for configuring x402 Endpoint Inspector."
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000.",
            "constraints": {
              "default": 5000,
              "minimum": 500,
              "maximum": 8000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com/api/paid"
        }
      },
      "exampleRequest": {
        "url": "https://example.com/api/paid"
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "paymentRequired": true,
        "status": 402,
        "metadataQuality": {
          "score": 100
        },
        "discovery": {
          "x402": {
            "status": 200
          },
          "openapi": {
            "status": 200
          }
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com/api/paid"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "paymentRequired": true,
                "status": 402,
                "metadataQuality": {
                  "score": 100
                },
                "discovery": {
                  "x402": {
                    "status": 200
                  },
                  "openapi": {
                    "status": 200
                  }
                }
              }
            }
          },
          "routeTemplate": "/api/inspect/x402",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri."
                      },
                      "method": {
                        "type": "string",
                        "enum": [
                          "GET",
                          "HEAD",
                          "POST"
                        ],
                        "default": "GET",
                        "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\"."
                      },
                      "headers": {
                        "type": "object",
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "Headers object for configuring x402 Endpoint Inspector."
                      },
                      "body": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Body object for configuring x402 Endpoint Inspector."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 500,
                        "maximum": 8000,
                        "default": 5000,
                        "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x402-inspector",
            "url": "https://agentbodega.store/api/inspect/x402",
            "method": "POST",
            "description": "Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.",
            "longDescription": "Purpose: Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nBest use: Use this when an agent needs inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: method, headers, body, timeoutMs.\n\nAccepted fields:\n- url (required, string): Url value for x402 Endpoint Inspector. Constraints: format: uri. Constraints: format: uri.\n- method (optional, string): Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".\n- headers (optional, object): Headers object for configuring x402 Endpoint Inspector.\n- body (optional, object): Body object for configuring x402 Endpoint Inspector.\n- timeoutMs (optional, integer): Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000. Constraints: default: 5000; min: 500; max: 8000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com/api/paid\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "x402 Endpoint Inspector",
            "category": "x402-tools",
            "kind": "http-json",
            "tags": [
              "x402",
              "inspection",
              "agent-tools",
              "bazaar",
              "openapi"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "method",
                "headers",
                "body",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "method",
                  "type": "string",
                  "required": false,
                  "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".",
                  "constraints": {
                    "enum": [
                      "GET",
                      "HEAD",
                      "POST"
                    ],
                    "default": "GET"
                  }
                },
                {
                  "name": "headers",
                  "type": "object",
                  "required": false,
                  "description": "Headers object for configuring x402 Endpoint Inspector."
                },
                {
                  "name": "body",
                  "type": "object",
                  "required": false,
                  "description": "Body object for configuring x402 Endpoint Inspector."
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000.",
                  "constraints": {
                    "default": 5000,
                    "minimum": 500,
                    "maximum": 8000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com/api/paid"
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri."
                },
                "method": {
                  "type": "string",
                  "enum": [
                    "GET",
                    "HEAD",
                    "POST"
                  ],
                  "default": "GET",
                  "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\"."
                },
                "headers": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Headers object for configuring x402 Endpoint Inspector."
                },
                "body": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Body object for configuring x402 Endpoint Inspector."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 500,
                  "maximum": 8000,
                  "default": 5000,
                  "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/inspect/x402",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/inspect/x402",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "x402-tools",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "x402-tools",
          "department": "x402 Tools",
          "aisleId": "payment-discovery",
          "aisle": "Payment Discovery",
          "shelfId": "endpoint-inspection",
          "shelf": "Endpoint Inspection",
          "offeringId": "x402-inspector",
          "offering": "x402 Endpoint Inspector",
          "pathIds": [
            "x402-tools",
            "payment-discovery",
            "endpoint-inspection",
            "x402-inspector"
          ],
          "pathLabels": [
            "x402 Tools",
            "Payment Discovery",
            "Endpoint Inspection",
            "x402 Endpoint Inspector"
          ],
          "taxonomyPath": "x402-tools.payment-discovery.endpoint-inspection.x402-inspector",
          "layout": {
            "department": {
              "id": "x402-tools",
              "name": "x402 Tools"
            },
            "aisle": {
              "id": "payment-discovery",
              "name": "Payment Discovery"
            },
            "shelf": {
              "id": "endpoint-inspection",
              "name": "Endpoint Inspection"
            },
            "offering": {
              "id": "x402-inspector",
              "name": "x402 Endpoint Inspector"
            },
            "pathIds": [
              "x402-tools",
              "payment-discovery",
              "endpoint-inspection",
              "x402-inspector"
            ],
            "pathLabels": [
              "x402 Tools",
              "Payment Discovery",
              "Endpoint Inspection",
              "x402 Endpoint Inspector"
            ]
          }
        },
        "description": {
          "short": "Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.",
          "full": "Purpose: Inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nBest use: Use this when an agent needs inspect a URL for x402 payment challenges, payable metadata, discovery links, OpenAPI, MCP, Agent Skills, and Bazaar-readiness signals.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: method, headers, body, timeoutMs.\n\nAccepted fields:\n- url (required, string): Url value for x402 Endpoint Inspector. Constraints: format: uri. Constraints: format: uri.\n- method (optional, string): Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".\n- headers (optional, object): Headers object for configuring x402 Endpoint Inspector.\n- body (optional, object): Body object for configuring x402 Endpoint Inspector.\n- timeoutMs (optional, integer): Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000. Constraints: default: 5000; min: 500; max: 8000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com/api/paid\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri."
            },
            "method": {
              "type": "string",
              "enum": [
                "GET",
                "HEAD",
                "POST"
              ],
              "default": "GET",
              "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\"."
            },
            "headers": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Headers object for configuring x402 Endpoint Inspector."
            },
            "body": {
              "type": "object",
              "additionalProperties": true,
              "description": "Body object for configuring x402 Endpoint Inspector."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 500,
              "maximum": 8000,
              "default": 5000,
              "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri."
            },
            "method": {
              "type": "string",
              "enum": [
                "GET",
                "HEAD",
                "POST"
              ],
              "default": "GET",
              "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\"."
            },
            "headers": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Headers object for configuring x402 Endpoint Inspector."
            },
            "body": {
              "type": "object",
              "additionalProperties": true,
              "description": "Body object for configuring x402 Endpoint Inspector."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 500,
              "maximum": 8000,
              "default": 5000,
              "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "method",
            "headers",
            "body",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for x402 Endpoint Inspector. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "method",
              "type": "string",
              "required": false,
              "description": "Method filter for x402 Endpoint Inspector. Accepted values: \"GET\", \"HEAD\", \"POST\". Constraints: accepted values: \"GET\", \"HEAD\", \"POST\"; default: \"GET\".",
              "constraints": {
                "enum": [
                  "GET",
                  "HEAD",
                  "POST"
                ],
                "default": "GET"
              }
            },
            {
              "name": "headers",
              "type": "object",
              "required": false,
              "description": "Headers object for configuring x402 Endpoint Inspector."
            },
            {
              "name": "body",
              "type": "object",
              "required": false,
              "description": "Body object for configuring x402 Endpoint Inspector."
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Timeout Ms numeric value for x402 Endpoint Inspector. Constraints: default: 5000; min: 500; max: 8000.",
              "constraints": {
                "default": 5000,
                "minimum": 500,
                "maximum": 8000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com/api/paid"
          }
        },
        "exampleRequest": {
          "url": "https://example.com/api/paid"
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "paymentRequired": true,
          "status": 402,
          "metadataQuality": {
            "score": 100
          },
          "discovery": {
            "x402": {
              "status": 200
            },
            "openapi": {
              "status": 200
            }
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/catalog",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Public Data Catalog",
      "description": "Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.",
      "longDescription": "Purpose: Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nBest use: Use this when an agent needs return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, category, name, includeSchemas, limit.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against endpoint name, title, category, description, tags, and path.\n- category (optional, string): Optional Public Data department/category to return. Constraints: accepted values: \"catalog\", \"workflow-bundles\", \"cached-results\", \"recurring-monitoring\", \"discovery-verification\", \"data-enrichment\", \"marketplace-listings\", \"real-estate-rentals\", \"ecommerce-products-reviews\", \"health-prices\", \"jobs-hiring\", \"facebook-data\", \"social-video-intelligence\", \"news\", \"public-records\".\n- name (optional, string): Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads.\n- includeSchemas (optional, boolean): Include each endpoint's full input and output schemas. Constraints: default: true.\n- limit (optional, integer): Maximum number of endpoints to return after filters. Constraints: default: 28; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"category\": \"public-records\",\n  \"includeSchemas\": true,\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "department-catalog",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "catalog",
      "aisle": "Catalog",
      "shelfId": "catalog",
      "shelf": "Catalog",
      "offeringId": "public-data-catalog",
      "offering": "Public Data Catalog",
      "pathIds": [
        "public-data",
        "catalog",
        "catalog",
        "public-data-catalog"
      ],
      "pathLabels": [
        "Public Data",
        "Catalog",
        "Catalog",
        "Public Data Catalog"
      ],
      "taxonomyPath": "public-data.catalog.catalog.public-data-catalog",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "catalog",
          "name": "Catalog"
        },
        "shelf": {
          "id": "catalog",
          "name": "Catalog"
        },
        "offering": {
          "id": "public-data-catalog",
          "name": "Public Data Catalog"
        },
        "pathIds": [
          "public-data",
          "catalog",
          "catalog",
          "public-data-catalog"
        ],
        "pathLabels": [
          "Public Data",
          "Catalog",
          "Catalog",
          "Public Data Catalog"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "public-data-department",
        "public-data",
        "catalog",
        "marketplace-listings",
        "real-estate",
        "ecommerce",
        "facebook-data",
        "jobs",
        "public-records",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
          },
          "category": {
            "type": "string",
            "enum": [
              "catalog",
              "workflow-bundles",
              "cached-results",
              "recurring-monitoring",
              "discovery-verification",
              "data-enrichment",
              "marketplace-listings",
              "real-estate-rentals",
              "ecommerce-products-reviews",
              "health-prices",
              "jobs-hiring",
              "facebook-data",
              "social-video-intelligence",
              "news",
              "public-records"
            ],
            "description": "Optional Public Data department/category to return."
          },
          "name": {
            "type": "string",
            "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
          },
          "includeSchemas": {
            "type": "boolean",
            "default": true,
            "description": "Include each endpoint's full input and output schemas."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 28,
            "description": "Maximum number of endpoints to return after filters."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "category",
          "name",
          "includeSchemas",
          "limit"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
          },
          {
            "name": "category",
            "type": "string",
            "required": false,
            "description": "Optional Public Data department/category to return.",
            "constraints": {
              "enum": [
                "catalog",
                "workflow-bundles",
                "cached-results",
                "recurring-monitoring",
                "discovery-verification",
                "data-enrichment",
                "marketplace-listings",
                "real-estate-rentals",
                "ecommerce-products-reviews",
                "health-prices",
                "jobs-hiring",
                "facebook-data",
                "social-video-intelligence",
                "news",
                "public-records"
              ]
            }
          },
          {
            "name": "name",
            "type": "string",
            "required": false,
            "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
          },
          {
            "name": "includeSchemas",
            "type": "boolean",
            "required": false,
            "description": "Include each endpoint's full input and output schemas.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum number of endpoints to return after filters.",
            "constraints": {
              "default": 28,
              "minimum": 1,
              "maximum": 50
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "category": "public-records",
          "includeSchemas": true,
          "limit": 10
        }
      },
      "exampleRequest": {
        "category": "public-records",
        "includeSchemas": true,
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "department",
          "categories",
          "endpoints"
        ],
        "properties": {
          "department": {
            "type": "object",
            "additionalProperties": true
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "endpoints": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "department": {
          "name": "AgentBodega Public Data Department",
          "department": "Public Data"
        },
        "categories": [
          {
            "category": "public-records",
            "count": 3
          }
        ],
        "endpoints": [
          {
            "name": "osha-violations-scraper",
            "category": "public-records",
            "price": {
              "mode": "dynamic"
            }
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "category": "public-records",
                "includeSchemas": true,
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "department": {
                  "name": "AgentBodega Public Data Department",
                  "department": "Public Data"
                },
                "categories": [
                  {
                    "category": "public-records",
                    "count": 3
                  }
                ],
                "endpoints": [
                  {
                    "name": "osha-violations-scraper",
                    "category": "public-records",
                    "price": {
                      "mode": "dynamic"
                    }
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/catalog",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
                      },
                      "category": {
                        "type": "string",
                        "enum": [
                          "catalog",
                          "workflow-bundles",
                          "cached-results",
                          "recurring-monitoring",
                          "discovery-verification",
                          "data-enrichment",
                          "marketplace-listings",
                          "real-estate-rentals",
                          "ecommerce-products-reviews",
                          "health-prices",
                          "jobs-hiring",
                          "facebook-data",
                          "social-video-intelligence",
                          "news",
                          "public-records"
                        ],
                        "description": "Optional Public Data department/category to return."
                      },
                      "name": {
                        "type": "string",
                        "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
                      },
                      "includeSchemas": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include each endpoint's full input and output schemas."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 50,
                        "default": 28,
                        "description": "Maximum number of endpoints to return after filters."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "department",
                      "categories",
                      "endpoints"
                    ],
                    "properties": {
                      "department": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "categories": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "endpoints": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "public-data-catalog",
            "url": "https://agentbodega.store/api/public-data/catalog",
            "method": "POST",
            "description": "Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.",
            "longDescription": "Purpose: Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nBest use: Use this when an agent needs return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, category, name, includeSchemas, limit.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against endpoint name, title, category, description, tags, and path.\n- category (optional, string): Optional Public Data department/category to return. Constraints: accepted values: \"catalog\", \"workflow-bundles\", \"cached-results\", \"recurring-monitoring\", \"discovery-verification\", \"data-enrichment\", \"marketplace-listings\", \"real-estate-rentals\", \"ecommerce-products-reviews\", \"health-prices\", \"jobs-hiring\", \"facebook-data\", \"social-video-intelligence\", \"news\", \"public-records\".\n- name (optional, string): Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads.\n- includeSchemas (optional, boolean): Include each endpoint's full input and output schemas. Constraints: default: true.\n- limit (optional, integer): Maximum number of endpoints to return after filters. Constraints: default: 28; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"category\": \"public-records\",\n  \"includeSchemas\": true,\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Public Data Catalog",
            "category": "public-data",
            "kind": "department-catalog",
            "tags": [
              "public-data-department",
              "public-data",
              "catalog",
              "marketplace-listings",
              "real-estate",
              "ecommerce",
              "facebook-data",
              "jobs",
              "public-records",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "category",
                "name",
                "includeSchemas",
                "limit"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
                },
                {
                  "name": "category",
                  "type": "string",
                  "required": false,
                  "description": "Optional Public Data department/category to return.",
                  "constraints": {
                    "enum": [
                      "catalog",
                      "workflow-bundles",
                      "cached-results",
                      "recurring-monitoring",
                      "discovery-verification",
                      "data-enrichment",
                      "marketplace-listings",
                      "real-estate-rentals",
                      "ecommerce-products-reviews",
                      "health-prices",
                      "jobs-hiring",
                      "facebook-data",
                      "social-video-intelligence",
                      "news",
                      "public-records"
                    ]
                  }
                },
                {
                  "name": "name",
                  "type": "string",
                  "required": false,
                  "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
                },
                {
                  "name": "includeSchemas",
                  "type": "boolean",
                  "required": false,
                  "description": "Include each endpoint's full input and output schemas.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum number of endpoints to return after filters.",
                  "constraints": {
                    "default": 28,
                    "minimum": 1,
                    "maximum": 50
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "category": "public-records",
                "includeSchemas": true,
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "query": {
                  "type": "string",
                  "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
                },
                "category": {
                  "type": "string",
                  "enum": [
                    "catalog",
                    "workflow-bundles",
                    "cached-results",
                    "recurring-monitoring",
                    "discovery-verification",
                    "data-enrichment",
                    "marketplace-listings",
                    "real-estate-rentals",
                    "ecommerce-products-reviews",
                    "health-prices",
                    "jobs-hiring",
                    "facebook-data",
                    "social-video-intelligence",
                    "news",
                    "public-records"
                  ],
                  "description": "Optional Public Data department/category to return."
                },
                "name": {
                  "type": "string",
                  "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
                },
                "includeSchemas": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include each endpoint's full input and output schemas."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 50,
                  "default": 28,
                  "description": "Maximum number of endpoints to return after filters."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "department",
                "categories",
                "endpoints"
              ],
              "properties": {
                "department": {
                  "type": "object",
                  "additionalProperties": true
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "endpoints": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/catalog",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/catalog",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "department-catalog",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "catalog",
          "aisle": "Catalog",
          "shelfId": "catalog",
          "shelf": "Catalog",
          "offeringId": "public-data-catalog",
          "offering": "Public Data Catalog",
          "pathIds": [
            "public-data",
            "catalog",
            "catalog",
            "public-data-catalog"
          ],
          "pathLabels": [
            "Public Data",
            "Catalog",
            "Catalog",
            "Public Data Catalog"
          ],
          "taxonomyPath": "public-data.catalog.catalog.public-data-catalog",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "catalog",
              "name": "Catalog"
            },
            "shelf": {
              "id": "catalog",
              "name": "Catalog"
            },
            "offering": {
              "id": "public-data-catalog",
              "name": "Public Data Catalog"
            },
            "pathIds": [
              "public-data",
              "catalog",
              "catalog",
              "public-data-catalog"
            ],
            "pathLabels": [
              "Public Data",
              "Catalog",
              "Catalog",
              "Public Data Catalog"
            ]
          }
        },
        "description": {
          "short": "Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.",
          "full": "Purpose: Return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nBest use: Use this when an agent needs return AgentBodega's Public Data department offerings grouped by category with full input/output schemas, prices, route paths, and workflow guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, category, name, includeSchemas, limit.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against endpoint name, title, category, description, tags, and path.\n- category (optional, string): Optional Public Data department/category to return. Constraints: accepted values: \"catalog\", \"workflow-bundles\", \"cached-results\", \"recurring-monitoring\", \"discovery-verification\", \"data-enrichment\", \"marketplace-listings\", \"real-estate-rentals\", \"ecommerce-products-reviews\", \"health-prices\", \"jobs-hiring\", \"facebook-data\", \"social-video-intelligence\", \"news\", \"public-records\".\n- name (optional, string): Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads.\n- includeSchemas (optional, boolean): Include each endpoint's full input and output schemas. Constraints: default: true.\n- limit (optional, integer): Maximum number of endpoints to return after filters. Constraints: default: 28; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"category\": \"public-records\",\n  \"includeSchemas\": true,\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
            },
            "category": {
              "type": "string",
              "enum": [
                "catalog",
                "workflow-bundles",
                "cached-results",
                "recurring-monitoring",
                "discovery-verification",
                "data-enrichment",
                "marketplace-listings",
                "real-estate-rentals",
                "ecommerce-products-reviews",
                "health-prices",
                "jobs-hiring",
                "facebook-data",
                "social-video-intelligence",
                "news",
                "public-records"
              ],
              "description": "Optional Public Data department/category to return."
            },
            "name": {
              "type": "string",
              "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
            },
            "includeSchemas": {
              "type": "boolean",
              "default": true,
              "description": "Include each endpoint's full input and output schemas."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 28,
              "description": "Maximum number of endpoints to return after filters."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
            },
            "category": {
              "type": "string",
              "enum": [
                "catalog",
                "workflow-bundles",
                "cached-results",
                "recurring-monitoring",
                "discovery-verification",
                "data-enrichment",
                "marketplace-listings",
                "real-estate-rentals",
                "ecommerce-products-reviews",
                "health-prices",
                "jobs-hiring",
                "facebook-data",
                "social-video-intelligence",
                "news",
                "public-records"
              ],
              "description": "Optional Public Data department/category to return."
            },
            "name": {
              "type": "string",
              "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
            },
            "includeSchemas": {
              "type": "boolean",
              "default": true,
              "description": "Include each endpoint's full input and output schemas."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 28,
              "description": "Maximum number of endpoints to return after filters."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "category",
            "name",
            "includeSchemas",
            "limit"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional text filter matched against endpoint name, title, category, description, tags, and path."
            },
            {
              "name": "category",
              "type": "string",
              "required": false,
              "description": "Optional Public Data department/category to return.",
              "constraints": {
                "enum": [
                  "catalog",
                  "workflow-bundles",
                  "cached-results",
                  "recurring-monitoring",
                  "discovery-verification",
                  "data-enrichment",
                  "marketplace-listings",
                  "real-estate-rentals",
                  "ecommerce-products-reviews",
                  "health-prices",
                  "jobs-hiring",
                  "facebook-data",
                  "social-video-intelligence",
                  "news",
                  "public-records"
                ]
              }
            },
            {
              "name": "name",
              "type": "string",
              "required": false,
              "description": "Optional exact endpoint name, such as osha-violations-scraper or marketplace-leads."
            },
            {
              "name": "includeSchemas",
              "type": "boolean",
              "required": false,
              "description": "Include each endpoint's full input and output schemas.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum number of endpoints to return after filters.",
              "constraints": {
                "default": 28,
                "minimum": 1,
                "maximum": 50
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "category": "public-records",
            "includeSchemas": true,
            "limit": 10
          }
        },
        "exampleRequest": {
          "category": "public-records",
          "includeSchemas": true,
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "department",
            "categories",
            "endpoints"
          ],
          "properties": {
            "department": {
              "type": "object",
              "additionalProperties": true
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "endpoints": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "department",
            "categories",
            "endpoints"
          ],
          "properties": {
            "department": {
              "type": "object",
              "additionalProperties": true
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "endpoints": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "department": {
            "name": "AgentBodega Public Data Department",
            "department": "Public Data"
          },
          "categories": [
            {
              "category": "public-records",
              "count": 3
            }
          ],
          "endpoints": [
            {
              "name": "osha-violations-scraper",
              "category": "public-records",
              "price": {
                "mode": "dynamic"
              }
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/social-media/catalog",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Social Media Department Catalog",
      "description": "Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.",
      "longDescription": "Purpose: Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nBest use: Use this when an agent needs return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: platform, query, includeSchemas, includeExternalPattern, includeCoverageMap, limit.\n\nAccepted fields:\n- platform (optional, string): Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department. Constraints: accepted values: \"all\", \"x\", \"twitter\", \"tiktok\", \"instagram\", \"facebook\", \"reddit\", \"youtube\", \"linkedin\", \"threads\", \"bluesky\", \"pinterest\", \"twitch\", \"snapchat\", \"github\", \"spotify\", \"soundcloud\", \"rumble\", \"truthsocial\", \"web\", \"amazon\", \"inference\", \"ads\", \"link-in-bio\", \"ugc\"; default: \"all\".\n- query (optional, string): Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases.\n- includeSchemas (optional, boolean): Include full schemas for configured AgentBodega social data endpoints. Constraints: default: true.\n- includeExternalPattern (optional, boolean): Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources. Constraints: default: true.\n- includeCoverageMap (optional, boolean): Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources. Constraints: default: true.\n- limit (optional, integer): Maximum configured endpoints and pattern rows to return. Constraints: default: 20; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"platform\": \"all\",\n  \"includeExternalPattern\": true,\n  \"includeCoverageMap\": true,\n  \"includeSchemas\": true,\n  \"limit\": 50\n}\n```",
      "category": "social-media",
      "kind": "department-catalog",
      "departmentId": "social-media",
      "department": "Social Media",
      "aisleId": "catalog",
      "aisle": "Catalog",
      "offeringId": "social-media-catalog",
      "offering": "Social Media Department Catalog",
      "pathIds": [
        "social-media",
        "catalog",
        "social-media-catalog"
      ],
      "pathLabels": [
        "Social Media",
        "Catalog",
        "Social Media Department Catalog"
      ],
      "taxonomyPath": "social-media.catalog.social-media-catalog",
      "layout": {
        "department": {
          "id": "social-media",
          "name": "Social Media"
        },
        "aisle": {
          "id": "catalog",
          "name": "Catalog"
        },
        "offering": {
          "id": "social-media-catalog",
          "name": "Social Media Department Catalog"
        },
        "pathIds": [
          "social-media",
          "catalog",
          "social-media-catalog"
        ],
        "pathLabels": [
          "Social Media",
          "Catalog",
          "Social Media Department Catalog"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "social-media",
        "x",
        "twitter",
        "tiktok",
        "facebook",
        "instagram",
        "reddit",
        "youtube",
        "linkedin",
        "threads",
        "bluesky",
        "pinterest",
        "twitch",
        "spotify",
        "ads",
        "ugc",
        "public-data",
        "creator-research",
        "social-listening"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string",
            "enum": [
              "all",
              "x",
              "twitter",
              "tiktok",
              "instagram",
              "facebook",
              "reddit",
              "youtube",
              "linkedin",
              "threads",
              "bluesky",
              "pinterest",
              "twitch",
              "snapchat",
              "github",
              "spotify",
              "soundcloud",
              "rumble",
              "truthsocial",
              "web",
              "amazon",
              "inference",
              "ads",
              "link-in-bio",
              "ugc"
            ],
            "default": "all",
            "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department."
          },
          "query": {
            "type": "string",
            "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
          },
          "includeSchemas": {
            "type": "boolean",
            "default": true,
            "description": "Include full schemas for configured AgentBodega social data endpoints."
          },
          "includeExternalPattern": {
            "type": "boolean",
            "default": true,
            "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources."
          },
          "includeCoverageMap": {
            "type": "boolean",
            "default": true,
            "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Maximum configured endpoints and pattern rows to return."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "platform",
          "query",
          "includeSchemas",
          "includeExternalPattern",
          "includeCoverageMap",
          "limit"
        ],
        "fields": [
          {
            "name": "platform",
            "type": "string",
            "required": false,
            "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department.",
            "constraints": {
              "enum": [
                "all",
                "x",
                "twitter",
                "tiktok",
                "instagram",
                "facebook",
                "reddit",
                "youtube",
                "linkedin",
                "threads",
                "bluesky",
                "pinterest",
                "twitch",
                "snapchat",
                "github",
                "spotify",
                "soundcloud",
                "rumble",
                "truthsocial",
                "web",
                "amazon",
                "inference",
                "ads",
                "link-in-bio",
                "ugc"
              ],
              "default": "all"
            }
          },
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
          },
          {
            "name": "includeSchemas",
            "type": "boolean",
            "required": false,
            "description": "Include full schemas for configured AgentBodega social data endpoints.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeExternalPattern",
            "type": "boolean",
            "required": false,
            "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeCoverageMap",
            "type": "boolean",
            "required": false,
            "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum configured endpoints and pattern rows to return.",
            "constraints": {
              "default": 20,
              "minimum": 1,
              "maximum": 50
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "platform": "all",
          "includeExternalPattern": true,
          "includeCoverageMap": true,
          "includeSchemas": true,
          "limit": 50
        }
      },
      "exampleRequest": {
        "platform": "all",
        "includeExternalPattern": true,
        "includeCoverageMap": true,
        "includeSchemas": true,
        "limit": 50
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "department",
          "endpoints",
          "xTwitterReadOnlyPattern",
          "socialCoveragePattern"
        ],
        "properties": {
          "department": {
            "type": "object",
            "additionalProperties": true
          },
          "endpoints": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "xTwitterReadOnlyPattern": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "socialCoveragePattern": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "nextSteps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "department": {
          "name": "AgentBodega Social Media Department",
          "department": "Social Media"
        },
        "endpoints": [
          {
            "name": "facebook-page-posts-scraper",
            "platform": "facebook",
            "configured": true
          }
        ],
        "xTwitterReadOnlyPattern": [
          {
            "id": "x-tweet-search",
            "status": "available",
            "priceUsd": "0.06",
            "configured": true
          }
        ],
        "socialCoveragePattern": [
          {
            "id": "tiktok-social-video",
            "status": "staged",
            "configured": false,
            "plannedProducts": [
              "profiles",
              "videos",
              "comments",
              "search"
            ]
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "platform": "all",
                "includeExternalPattern": true,
                "includeCoverageMap": true,
                "includeSchemas": true,
                "limit": 50
              }
            },
            "output": {
              "type": "json",
              "example": {
                "department": {
                  "name": "AgentBodega Social Media Department",
                  "department": "Social Media"
                },
                "endpoints": [
                  {
                    "name": "facebook-page-posts-scraper",
                    "platform": "facebook",
                    "configured": true
                  }
                ],
                "xTwitterReadOnlyPattern": [
                  {
                    "id": "x-tweet-search",
                    "status": "available",
                    "priceUsd": "0.06",
                    "configured": true
                  }
                ],
                "socialCoveragePattern": [
                  {
                    "id": "tiktok-social-video",
                    "status": "staged",
                    "configured": false,
                    "plannedProducts": [
                      "profiles",
                      "videos",
                      "comments",
                      "search"
                    ]
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/social-media/catalog",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "platform": {
                        "type": "string",
                        "enum": [
                          "all",
                          "x",
                          "twitter",
                          "tiktok",
                          "instagram",
                          "facebook",
                          "reddit",
                          "youtube",
                          "linkedin",
                          "threads",
                          "bluesky",
                          "pinterest",
                          "twitch",
                          "snapchat",
                          "github",
                          "spotify",
                          "soundcloud",
                          "rumble",
                          "truthsocial",
                          "web",
                          "amazon",
                          "inference",
                          "ads",
                          "link-in-bio",
                          "ugc"
                        ],
                        "default": "all",
                        "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department."
                      },
                      "query": {
                        "type": "string",
                        "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
                      },
                      "includeSchemas": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include full schemas for configured AgentBodega social data endpoints."
                      },
                      "includeExternalPattern": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources."
                      },
                      "includeCoverageMap": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 50,
                        "default": 20,
                        "description": "Maximum configured endpoints and pattern rows to return."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "department",
                      "endpoints",
                      "xTwitterReadOnlyPattern",
                      "socialCoveragePattern"
                    ],
                    "properties": {
                      "department": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "endpoints": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "xTwitterReadOnlyPattern": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "socialCoveragePattern": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "categories": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "nextSteps": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "social-media-catalog",
            "url": "https://agentbodega.store/api/social-media/catalog",
            "method": "POST",
            "description": "Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.",
            "longDescription": "Purpose: Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nBest use: Use this when an agent needs return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: platform, query, includeSchemas, includeExternalPattern, includeCoverageMap, limit.\n\nAccepted fields:\n- platform (optional, string): Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department. Constraints: accepted values: \"all\", \"x\", \"twitter\", \"tiktok\", \"instagram\", \"facebook\", \"reddit\", \"youtube\", \"linkedin\", \"threads\", \"bluesky\", \"pinterest\", \"twitch\", \"snapchat\", \"github\", \"spotify\", \"soundcloud\", \"rumble\", \"truthsocial\", \"web\", \"amazon\", \"inference\", \"ads\", \"link-in-bio\", \"ugc\"; default: \"all\".\n- query (optional, string): Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases.\n- includeSchemas (optional, boolean): Include full schemas for configured AgentBodega social data endpoints. Constraints: default: true.\n- includeExternalPattern (optional, boolean): Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources. Constraints: default: true.\n- includeCoverageMap (optional, boolean): Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources. Constraints: default: true.\n- limit (optional, integer): Maximum configured endpoints and pattern rows to return. Constraints: default: 20; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"platform\": \"all\",\n  \"includeExternalPattern\": true,\n  \"includeCoverageMap\": true,\n  \"includeSchemas\": true,\n  \"limit\": 50\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Social Media Department Catalog",
            "category": "social-media",
            "kind": "department-catalog",
            "tags": [
              "social-media",
              "x",
              "twitter",
              "tiktok",
              "facebook",
              "instagram",
              "reddit",
              "youtube",
              "linkedin",
              "threads",
              "bluesky",
              "pinterest",
              "twitch",
              "spotify",
              "ads",
              "ugc",
              "public-data",
              "creator-research",
              "social-listening"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "platform",
                "query",
                "includeSchemas",
                "includeExternalPattern",
                "includeCoverageMap",
                "limit"
              ],
              "fields": [
                {
                  "name": "platform",
                  "type": "string",
                  "required": false,
                  "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department.",
                  "constraints": {
                    "enum": [
                      "all",
                      "x",
                      "twitter",
                      "tiktok",
                      "instagram",
                      "facebook",
                      "reddit",
                      "youtube",
                      "linkedin",
                      "threads",
                      "bluesky",
                      "pinterest",
                      "twitch",
                      "snapchat",
                      "github",
                      "spotify",
                      "soundcloud",
                      "rumble",
                      "truthsocial",
                      "web",
                      "amazon",
                      "inference",
                      "ads",
                      "link-in-bio",
                      "ugc"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
                },
                {
                  "name": "includeSchemas",
                  "type": "boolean",
                  "required": false,
                  "description": "Include full schemas for configured AgentBodega social data endpoints.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeExternalPattern",
                  "type": "boolean",
                  "required": false,
                  "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeCoverageMap",
                  "type": "boolean",
                  "required": false,
                  "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum configured endpoints and pattern rows to return.",
                  "constraints": {
                    "default": 20,
                    "minimum": 1,
                    "maximum": 50
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "platform": "all",
                "includeExternalPattern": true,
                "includeCoverageMap": true,
                "includeSchemas": true,
                "limit": 50
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "platform": {
                  "type": "string",
                  "enum": [
                    "all",
                    "x",
                    "twitter",
                    "tiktok",
                    "instagram",
                    "facebook",
                    "reddit",
                    "youtube",
                    "linkedin",
                    "threads",
                    "bluesky",
                    "pinterest",
                    "twitch",
                    "snapchat",
                    "github",
                    "spotify",
                    "soundcloud",
                    "rumble",
                    "truthsocial",
                    "web",
                    "amazon",
                    "inference",
                    "ads",
                    "link-in-bio",
                    "ugc"
                  ],
                  "default": "all",
                  "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department."
                },
                "query": {
                  "type": "string",
                  "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
                },
                "includeSchemas": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include full schemas for configured AgentBodega social data endpoints."
                },
                "includeExternalPattern": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources."
                },
                "includeCoverageMap": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 50,
                  "default": 20,
                  "description": "Maximum configured endpoints and pattern rows to return."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "department",
                "endpoints",
                "xTwitterReadOnlyPattern",
                "socialCoveragePattern"
              ],
              "properties": {
                "department": {
                  "type": "object",
                  "additionalProperties": true
                },
                "endpoints": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "xTwitterReadOnlyPattern": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "socialCoveragePattern": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "nextSteps": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/social-media/catalog",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/social-media/catalog",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "social-media",
        "kind": "department-catalog",
        "taxonomy": {
          "departmentId": "social-media",
          "department": "Social Media",
          "aisleId": "catalog",
          "aisle": "Catalog",
          "offeringId": "social-media-catalog",
          "offering": "Social Media Department Catalog",
          "pathIds": [
            "social-media",
            "catalog",
            "social-media-catalog"
          ],
          "pathLabels": [
            "Social Media",
            "Catalog",
            "Social Media Department Catalog"
          ],
          "taxonomyPath": "social-media.catalog.social-media-catalog",
          "layout": {
            "department": {
              "id": "social-media",
              "name": "Social Media"
            },
            "aisle": {
              "id": "catalog",
              "name": "Catalog"
            },
            "offering": {
              "id": "social-media-catalog",
              "name": "Social Media Department Catalog"
            },
            "pathIds": [
              "social-media",
              "catalog",
              "social-media-catalog"
            ],
            "pathLabels": [
              "Social Media",
              "Catalog",
              "Social Media Department Catalog"
            ]
          }
        },
        "description": {
          "short": "Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.",
          "full": "Purpose: Return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nBest use: Use this when an agent needs return AgentBodega's Social Media department: configured public social/video data routes plus available and staged coverage families for social, creator, video, audio, ad-library, and UGC research products.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: platform, query, includeSchemas, includeExternalPattern, includeCoverageMap, limit.\n\nAccepted fields:\n- platform (optional, string): Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department. Constraints: accepted values: \"all\", \"x\", \"twitter\", \"tiktok\", \"instagram\", \"facebook\", \"reddit\", \"youtube\", \"linkedin\", \"threads\", \"bluesky\", \"pinterest\", \"twitch\", \"snapchat\", \"github\", \"spotify\", \"soundcloud\", \"rumble\", \"truthsocial\", \"web\", \"amazon\", \"inference\", \"ads\", \"link-in-bio\", \"ugc\"; default: \"all\".\n- query (optional, string): Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases.\n- includeSchemas (optional, boolean): Include full schemas for configured AgentBodega social data endpoints. Constraints: default: true.\n- includeExternalPattern (optional, boolean): Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources. Constraints: default: true.\n- includeCoverageMap (optional, boolean): Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources. Constraints: default: true.\n- limit (optional, integer): Maximum configured endpoints and pattern rows to return. Constraints: default: 20; min: 1; max: 50.\n\nExample request body:\n```json\n{\n  \"platform\": \"all\",\n  \"includeExternalPattern\": true,\n  \"includeCoverageMap\": true,\n  \"includeSchemas\": true,\n  \"limit\": 50\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "platform": {
              "type": "string",
              "enum": [
                "all",
                "x",
                "twitter",
                "tiktok",
                "instagram",
                "facebook",
                "reddit",
                "youtube",
                "linkedin",
                "threads",
                "bluesky",
                "pinterest",
                "twitch",
                "snapchat",
                "github",
                "spotify",
                "soundcloud",
                "rumble",
                "truthsocial",
                "web",
                "amazon",
                "inference",
                "ads",
                "link-in-bio",
                "ugc"
              ],
              "default": "all",
              "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department."
            },
            "query": {
              "type": "string",
              "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
            },
            "includeSchemas": {
              "type": "boolean",
              "default": true,
              "description": "Include full schemas for configured AgentBodega social data endpoints."
            },
            "includeExternalPattern": {
              "type": "boolean",
              "default": true,
              "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources."
            },
            "includeCoverageMap": {
              "type": "boolean",
              "default": true,
              "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20,
              "description": "Maximum configured endpoints and pattern rows to return."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "platform": {
              "type": "string",
              "enum": [
                "all",
                "x",
                "twitter",
                "tiktok",
                "instagram",
                "facebook",
                "reddit",
                "youtube",
                "linkedin",
                "threads",
                "bluesky",
                "pinterest",
                "twitch",
                "snapchat",
                "github",
                "spotify",
                "soundcloud",
                "rumble",
                "truthsocial",
                "web",
                "amazon",
                "inference",
                "ads",
                "link-in-bio",
                "ugc"
              ],
              "default": "all",
              "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department."
            },
            "query": {
              "type": "string",
              "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
            },
            "includeSchemas": {
              "type": "boolean",
              "default": true,
              "description": "Include full schemas for configured AgentBodega social data endpoints."
            },
            "includeExternalPattern": {
              "type": "boolean",
              "default": true,
              "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources."
            },
            "includeCoverageMap": {
              "type": "boolean",
              "default": true,
              "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20,
              "description": "Maximum configured endpoints and pattern rows to return."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "platform",
            "query",
            "includeSchemas",
            "includeExternalPattern",
            "includeCoverageMap",
            "limit"
          ],
          "fields": [
            {
              "name": "platform",
              "type": "string",
              "required": false,
              "description": "Optional platform or product-family focus. Use x or twitter for X/Twitter, ugc for creator research, ads for ad-library intelligence, or all for the full Social Media department.",
              "constraints": {
                "enum": [
                  "all",
                  "x",
                  "twitter",
                  "tiktok",
                  "instagram",
                  "facebook",
                  "reddit",
                  "youtube",
                  "linkedin",
                  "threads",
                  "bluesky",
                  "pinterest",
                  "twitch",
                  "snapchat",
                  "github",
                  "spotify",
                  "soundcloud",
                  "rumble",
                  "truthsocial",
                  "web",
                  "amazon",
                  "inference",
                  "ads",
                  "link-in-bio",
                  "ugc"
                ],
                "default": "all"
              }
            },
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional text filter matched against platform, endpoint title, category, description, tags, and X/Twitter use cases."
            },
            {
              "name": "includeSchemas",
              "type": "boolean",
              "required": false,
              "description": "Include full schemas for configured AgentBodega social data endpoints.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeExternalPattern",
              "type": "boolean",
              "required": false,
              "description": "Include read-only X/Twitter product specs. Rows with configured false are staged and are not advertised as payable resources.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeCoverageMap",
              "type": "boolean",
              "required": false,
              "description": "Include white-labeled Social Media coverage families, including staged platform/product families that are not yet payable resources.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum configured endpoints and pattern rows to return.",
              "constraints": {
                "default": 20,
                "minimum": 1,
                "maximum": 50
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "platform": "all",
            "includeExternalPattern": true,
            "includeCoverageMap": true,
            "includeSchemas": true,
            "limit": 50
          }
        },
        "exampleRequest": {
          "platform": "all",
          "includeExternalPattern": true,
          "includeCoverageMap": true,
          "includeSchemas": true,
          "limit": 50
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "department",
            "endpoints",
            "xTwitterReadOnlyPattern",
            "socialCoveragePattern"
          ],
          "properties": {
            "department": {
              "type": "object",
              "additionalProperties": true
            },
            "endpoints": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "xTwitterReadOnlyPattern": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "socialCoveragePattern": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "nextSteps": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "department",
            "endpoints",
            "xTwitterReadOnlyPattern",
            "socialCoveragePattern"
          ],
          "properties": {
            "department": {
              "type": "object",
              "additionalProperties": true
            },
            "endpoints": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "xTwitterReadOnlyPattern": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "socialCoveragePattern": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "nextSteps": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "department": {
            "name": "AgentBodega Social Media Department",
            "department": "Social Media"
          },
          "endpoints": [
            {
              "name": "facebook-page-posts-scraper",
              "platform": "facebook",
              "configured": true
            }
          ],
          "xTwitterReadOnlyPattern": [
            {
              "id": "x-tweet-search",
              "status": "available",
              "priceUsd": "0.06",
              "configured": true
            }
          ],
          "socialCoveragePattern": [
            {
              "id": "tiktok-social-video",
              "status": "staged",
              "configured": false,
              "plannedProducts": [
                "profiles",
                "videos",
                "comments",
                "search"
              ]
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/web/search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Web Search",
      "description": "Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.",
      "longDescription": "Purpose: Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nBest use: Use this when an agent needs search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, site, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Natural-language search query or keyword query to run against public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum normalized results to return. Constraints: default: 5; min: 1; max: 10.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit result snippets and return titles, URLs, domains, and rank only. Constraints: default: true.\n- timeoutMs (optional, integer): Search timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"agent payment APIs\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```",
      "category": "search-web",
      "kind": "web-search-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "search",
      "aisle": "Search",
      "shelfId": "web-results",
      "shelf": "Web Results",
      "offeringId": "web-search",
      "offering": "Web Search",
      "pathIds": [
        "search-web",
        "search",
        "web-results",
        "web-search"
      ],
      "pathLabels": [
        "Search & Web",
        "Search",
        "Web Results",
        "Web Search"
      ],
      "taxonomyPath": "search-web.search.web-results.web-search",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "search",
          "name": "Search"
        },
        "shelf": {
          "id": "web-results",
          "name": "Web Results"
        },
        "offering": {
          "id": "web-search",
          "name": "Web Search"
        },
        "pathIds": [
          "search-web",
          "search",
          "web-results",
          "web-search"
        ],
        "pathLabels": [
          "Search & Web",
          "Search",
          "Web Results",
          "Web Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "search",
        "source-discovery",
        "citations",
        "research",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 240,
            "description": "Natural-language search query or keyword query to run against public web results."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "default": 5,
            "description": "Maximum normalized results to return."
          },
          "site": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
          },
          "freshness": {
            "type": "string",
            "enum": [
              "any",
              "day",
              "week",
              "month",
              "year"
            ],
            "default": "any",
            "description": "Optional freshness preference. Use any when recency is not required."
          },
          "includeSnippets": {
            "type": "boolean",
            "default": true,
            "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 6000,
            "description": "Search timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "query"
        ],
        "optional": [
          "limit",
          "site",
          "freshness",
          "includeSnippets",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": true,
            "description": "Natural-language search query or keyword query to run against public web results.",
            "constraints": {
              "minLength": 2,
              "maxLength": 240
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum normalized results to return.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 10
            }
          },
          {
            "name": "site",
            "type": "string",
            "required": false,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "freshness",
            "type": "string",
            "required": false,
            "description": "Optional freshness preference. Use any when recency is not required.",
            "constraints": {
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any"
            }
          },
          {
            "name": "includeSnippets",
            "type": "boolean",
            "required": false,
            "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Search timeout in milliseconds.",
            "constraints": {
              "default": 6000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "agent payment APIs",
          "limit": 5,
          "freshness": "any",
          "includeSnippets": true
        }
      },
      "exampleRequest": {
        "query": "agent payment APIs",
        "limit": 5,
        "freshness": "any",
        "includeSnippets": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "search",
          "results",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "search": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "web-search",
          "name": "Web Search",
          "department": "Search & Web"
        },
        "requested": {
          "query": "agent payment APIs",
          "site": null,
          "freshness": "any",
          "limit": 5,
          "includeSnippets": true
        },
        "source": {
          "routing": "managed-web-search",
          "upstreamDetailsDisclosed": false
        },
        "search": {
          "query": "agent payment APIs",
          "resultCount": 2,
          "checkedAt": "2026-07-07T00:00:00.000Z",
          "durationMs": 420
        },
        "results": [
          {
            "rank": 1,
            "title": "Agent Payment API Guide",
            "url": "https://example.com/agent-payments",
            "domain": "example.com",
            "snippet": "A guide to payment-enabled API calls for agents."
          },
          {
            "rank": 2,
            "title": "x402 API Examples",
            "url": "https://example.org/x402-examples",
            "domain": "example.org",
            "snippet": "Examples of HTTP 402 payment flows."
          }
        ],
        "limits": {
          "maxResults": 10,
          "timeoutMs": 6000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "agent payment APIs",
                "limit": 5,
                "freshness": "any",
                "includeSnippets": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "web-search",
                  "name": "Web Search",
                  "department": "Search & Web"
                },
                "requested": {
                  "query": "agent payment APIs",
                  "site": null,
                  "freshness": "any",
                  "limit": 5,
                  "includeSnippets": true
                },
                "source": {
                  "routing": "managed-web-search",
                  "upstreamDetailsDisclosed": false
                },
                "search": {
                  "query": "agent payment APIs",
                  "resultCount": 2,
                  "checkedAt": "2026-07-07T00:00:00.000Z",
                  "durationMs": 420
                },
                "results": [
                  {
                    "rank": 1,
                    "title": "Agent Payment API Guide",
                    "url": "https://example.com/agent-payments",
                    "domain": "example.com",
                    "snippet": "A guide to payment-enabled API calls for agents."
                  },
                  {
                    "rank": 2,
                    "title": "x402 API Examples",
                    "url": "https://example.org/x402-examples",
                    "domain": "example.org",
                    "snippet": "Examples of HTTP 402 payment flows."
                  }
                ],
                "limits": {
                  "maxResults": 10,
                  "timeoutMs": 6000
                }
              }
            }
          },
          "routeTemplate": "/api/web/search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "query"
                    ],
                    "properties": {
                      "query": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 240,
                        "description": "Natural-language search query or keyword query to run against public web results."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 10,
                        "default": 5,
                        "description": "Maximum normalized results to return."
                      },
                      "site": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                      },
                      "freshness": {
                        "type": "string",
                        "enum": [
                          "any",
                          "day",
                          "week",
                          "month",
                          "year"
                        ],
                        "default": "any",
                        "description": "Optional freshness preference. Use any when recency is not required."
                      },
                      "includeSnippets": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 6000,
                        "description": "Search timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "search",
                      "results",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "search": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "web-search",
            "url": "https://agentbodega.store/api/web/search",
            "method": "POST",
            "description": "Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.",
            "longDescription": "Purpose: Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nBest use: Use this when an agent needs search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, site, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Natural-language search query or keyword query to run against public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum normalized results to return. Constraints: default: 5; min: 1; max: 10.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit result snippets and return titles, URLs, domains, and rank only. Constraints: default: true.\n- timeoutMs (optional, integer): Search timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"agent payment APIs\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Web Search",
            "category": "search-web",
            "kind": "web-search-tool",
            "tags": [
              "search-web",
              "web",
              "search",
              "source-discovery",
              "citations",
              "research",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "query"
              ],
              "optional": [
                "limit",
                "site",
                "freshness",
                "includeSnippets",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": true,
                  "description": "Natural-language search query or keyword query to run against public web results.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 240
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum normalized results to return.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 10
                  }
                },
                {
                  "name": "site",
                  "type": "string",
                  "required": false,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "freshness",
                  "type": "string",
                  "required": false,
                  "description": "Optional freshness preference. Use any when recency is not required.",
                  "constraints": {
                    "enum": [
                      "any",
                      "day",
                      "week",
                      "month",
                      "year"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "includeSnippets",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Search timeout in milliseconds.",
                  "constraints": {
                    "default": 6000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "agent payment APIs",
                "limit": 5,
                "freshness": "any",
                "includeSnippets": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "query"
              ],
              "properties": {
                "query": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 240,
                  "description": "Natural-language search query or keyword query to run against public web results."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 10,
                  "default": 5,
                  "description": "Maximum normalized results to return."
                },
                "site": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                },
                "freshness": {
                  "type": "string",
                  "enum": [
                    "any",
                    "day",
                    "week",
                    "month",
                    "year"
                  ],
                  "default": "any",
                  "description": "Optional freshness preference. Use any when recency is not required."
                },
                "includeSnippets": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 6000,
                  "description": "Search timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "search",
                "results",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "search": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/web/search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/web/search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "web-search-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "search",
          "aisle": "Search",
          "shelfId": "web-results",
          "shelf": "Web Results",
          "offeringId": "web-search",
          "offering": "Web Search",
          "pathIds": [
            "search-web",
            "search",
            "web-results",
            "web-search"
          ],
          "pathLabels": [
            "Search & Web",
            "Search",
            "Web Results",
            "Web Search"
          ],
          "taxonomyPath": "search-web.search.web-results.web-search",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "search",
              "name": "Search"
            },
            "shelf": {
              "id": "web-results",
              "name": "Web Results"
            },
            "offering": {
              "id": "web-search",
              "name": "Web Search"
            },
            "pathIds": [
              "search-web",
              "search",
              "web-results",
              "web-search"
            ],
            "pathLabels": [
              "Search & Web",
              "Search",
              "Web Results",
              "Web Search"
            ]
          }
        },
        "description": {
          "short": "Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.",
          "full": "Purpose: Search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nBest use: Use this when an agent needs search the public web and return normalized, source-neutral results with titles, URLs, domains, snippets, freshness controls, and strict result caps for agent research workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, site, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Natural-language search query or keyword query to run against public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum normalized results to return. Constraints: default: 5; min: 1; max: 10.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit result snippets and return titles, URLs, domains, and rank only. Constraints: default: true.\n- timeoutMs (optional, integer): Search timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"agent payment APIs\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Natural-language search query or keyword query to run against public web results."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum normalized results to return."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "includeSnippets": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Natural-language search query or keyword query to run against public web results."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum normalized results to return."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "includeSnippets": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "query"
          ],
          "optional": [
            "limit",
            "site",
            "freshness",
            "includeSnippets",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": true,
              "description": "Natural-language search query or keyword query to run against public web results.",
              "constraints": {
                "minLength": 2,
                "maxLength": 240
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum normalized results to return.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 10
              }
            },
            {
              "name": "site",
              "type": "string",
              "required": false,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "freshness",
              "type": "string",
              "required": false,
              "description": "Optional freshness preference. Use any when recency is not required.",
              "constraints": {
                "enum": [
                  "any",
                  "day",
                  "week",
                  "month",
                  "year"
                ],
                "default": "any"
              }
            },
            {
              "name": "includeSnippets",
              "type": "boolean",
              "required": false,
              "description": "Set false to omit result snippets and return titles, URLs, domains, and rank only.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Search timeout in milliseconds.",
              "constraints": {
                "default": 6000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "agent payment APIs",
            "limit": 5,
            "freshness": "any",
            "includeSnippets": true
          }
        },
        "exampleRequest": {
          "query": "agent payment APIs",
          "limit": 5,
          "freshness": "any",
          "includeSnippets": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "search",
            "results",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "search",
            "results",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "web-search",
            "name": "Web Search",
            "department": "Search & Web"
          },
          "requested": {
            "query": "agent payment APIs",
            "site": null,
            "freshness": "any",
            "limit": 5,
            "includeSnippets": true
          },
          "source": {
            "routing": "managed-web-search",
            "upstreamDetailsDisclosed": false
          },
          "search": {
            "query": "agent payment APIs",
            "resultCount": 2,
            "checkedAt": "2026-07-07T00:00:00.000Z",
            "durationMs": 420
          },
          "results": [
            {
              "rank": 1,
              "title": "Agent Payment API Guide",
              "url": "https://example.com/agent-payments",
              "domain": "example.com",
              "snippet": "A guide to payment-enabled API calls for agents."
            },
            {
              "rank": 2,
              "title": "x402 API Examples",
              "url": "https://example.org/x402-examples",
              "domain": "example.org",
              "snippet": "Examples of HTTP 402 payment flows."
            }
          ],
          "limits": {
            "maxResults": 10,
            "timeoutMs": 6000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/web/similar",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Similar Page Finder",
      "description": "Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.",
      "longDescription": "Purpose: Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nBest use: Use this when an agent needs find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: url, intent, site, excludeDomains, limit, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages. Constraints: min length: 2; max length: 240.\n- url (optional, string): Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page. Constraints: format: uri.\n- intent (optional, string): Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references. Constraints: accepted values: \"related\", \"alternatives\", \"competitors\", \"sources\"; default: \"related\".\n- site (optional, string): Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- excludeDomains (optional, array): Optional domains to omit from returned matches. The seed URL domain is omitted automatically. Constraints: max items: 10.\n- limit (optional, integer): Maximum similar pages to return. Constraints: default: 5; min: 1; max: 10.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons. Constraints: default: true.\n- timeoutMs (optional, integer): Search and optional seed-page fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"x402 paid API marketplace\",\n  \"intent\": \"alternatives\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```",
      "category": "search-web",
      "kind": "web-similar-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "similar",
      "aisle": "Similar Pages",
      "shelfId": "related-pages",
      "shelf": "Related Pages",
      "offeringId": "web-similar",
      "offering": "Similar Page Finder",
      "pathIds": [
        "search-web",
        "similar",
        "related-pages",
        "web-similar"
      ],
      "pathLabels": [
        "Search & Web",
        "Similar Pages",
        "Related Pages",
        "Similar Page Finder"
      ],
      "taxonomyPath": "search-web.similar.related-pages.web-similar",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "similar",
          "name": "Similar Pages"
        },
        "shelf": {
          "id": "related-pages",
          "name": "Related Pages"
        },
        "offering": {
          "id": "web-similar",
          "name": "Similar Page Finder"
        },
        "pathIds": [
          "search-web",
          "similar",
          "related-pages",
          "web-similar"
        ],
        "pathLabels": [
          "Search & Web",
          "Similar Pages",
          "Related Pages",
          "Similar Page Finder"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "similar",
        "related-pages",
        "alternatives",
        "competitor-research",
        "source-discovery",
        "research",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 240,
            "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page."
          },
          "intent": {
            "type": "string",
            "enum": [
              "related",
              "alternatives",
              "competitors",
              "sources"
            ],
            "default": "related",
            "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references."
          },
          "site": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname."
          },
          "excludeDomains": {
            "type": "array",
            "maxItems": 10,
            "items": {
              "type": "string",
              "maxLength": 120,
              "description": "Exclude Domains item value for Similar Page Finder. Constraints: max length: 120."
            },
            "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "default": 5,
            "description": "Maximum similar pages to return."
          },
          "freshness": {
            "type": "string",
            "enum": [
              "any",
              "day",
              "week",
              "month",
              "year"
            ],
            "default": "any",
            "description": "Optional freshness preference. Use any when recency is not required."
          },
          "includeSnippets": {
            "type": "boolean",
            "default": true,
            "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 6000,
            "description": "Search and optional seed-page fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "query"
        ],
        "optional": [
          "url",
          "intent",
          "site",
          "excludeDomains",
          "limit",
          "freshness",
          "includeSnippets",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": true,
            "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages.",
            "constraints": {
              "minLength": 2,
              "maxLength": 240
            }
          },
          {
            "name": "url",
            "type": "string",
            "required": false,
            "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "intent",
            "type": "string",
            "required": false,
            "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references.",
            "constraints": {
              "enum": [
                "related",
                "alternatives",
                "competitors",
                "sources"
              ],
              "default": "related"
            }
          },
          {
            "name": "site",
            "type": "string",
            "required": false,
            "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "excludeDomains",
            "type": "array",
            "required": false,
            "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically.",
            "constraints": {
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum similar pages to return.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 10
            }
          },
          {
            "name": "freshness",
            "type": "string",
            "required": false,
            "description": "Optional freshness preference. Use any when recency is not required.",
            "constraints": {
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any"
            }
          },
          {
            "name": "includeSnippets",
            "type": "boolean",
            "required": false,
            "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Search and optional seed-page fetch timeout in milliseconds.",
            "constraints": {
              "default": 6000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "x402 paid API marketplace",
          "intent": "alternatives",
          "limit": 5,
          "freshness": "any",
          "includeSnippets": true
        }
      },
      "exampleRequest": {
        "query": "x402 paid API marketplace",
        "intent": "alternatives",
        "limit": 5,
        "freshness": "any",
        "includeSnippets": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "seed",
          "similar",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "seed": {
            "type": "object",
            "additionalProperties": true
          },
          "similar": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "search": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "web-similar",
          "name": "Similar Page Finder",
          "department": "Search & Web"
        },
        "requested": {
          "query": "x402 paid API marketplace",
          "url": null,
          "intent": "alternatives",
          "site": null,
          "freshness": "any",
          "excludeDomains": [],
          "limit": 5,
          "includeSnippets": true
        },
        "source": {
          "routing": "managed-web-similar",
          "upstreamDetailsDisclosed": false
        },
        "seed": {
          "type": "query",
          "query": "x402 paid API marketplace",
          "derivedQuery": "x402 paid API marketplace alternatives similar tools"
        },
        "search": {
          "query": "x402 paid API marketplace alternatives similar tools",
          "resultCount": 2,
          "checkedAt": "2026-07-07T00:00:00.000Z",
          "durationMs": 510
        },
        "similar": [
          {
            "rank": 1,
            "originalRank": 1,
            "title": "Agent Payment API Guide",
            "url": "https://example.com/agent-payments",
            "domain": "example.com",
            "reason": "Potential alternative or substitute surfaced by the similarity query.",
            "snippet": "A guide to payment-enabled API calls for agents."
          },
          {
            "rank": 2,
            "originalRank": 2,
            "title": "x402 API Examples",
            "url": "https://example.org/x402-examples",
            "domain": "example.org",
            "reason": "Potential alternative or substitute surfaced by the similarity query.",
            "snippet": "Examples of HTTP 402 payment flows."
          }
        ],
        "limits": {
          "maxResults": 10,
          "maxExcludedDomains": 10,
          "timeoutMs": 6000,
          "maxSeedBytes": 32768
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "x402 paid API marketplace",
                "intent": "alternatives",
                "limit": 5,
                "freshness": "any",
                "includeSnippets": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "web-similar",
                  "name": "Similar Page Finder",
                  "department": "Search & Web"
                },
                "requested": {
                  "query": "x402 paid API marketplace",
                  "url": null,
                  "intent": "alternatives",
                  "site": null,
                  "freshness": "any",
                  "excludeDomains": [],
                  "limit": 5,
                  "includeSnippets": true
                },
                "source": {
                  "routing": "managed-web-similar",
                  "upstreamDetailsDisclosed": false
                },
                "seed": {
                  "type": "query",
                  "query": "x402 paid API marketplace",
                  "derivedQuery": "x402 paid API marketplace alternatives similar tools"
                },
                "search": {
                  "query": "x402 paid API marketplace alternatives similar tools",
                  "resultCount": 2,
                  "checkedAt": "2026-07-07T00:00:00.000Z",
                  "durationMs": 510
                },
                "similar": [
                  {
                    "rank": 1,
                    "originalRank": 1,
                    "title": "Agent Payment API Guide",
                    "url": "https://example.com/agent-payments",
                    "domain": "example.com",
                    "reason": "Potential alternative or substitute surfaced by the similarity query.",
                    "snippet": "A guide to payment-enabled API calls for agents."
                  },
                  {
                    "rank": 2,
                    "originalRank": 2,
                    "title": "x402 API Examples",
                    "url": "https://example.org/x402-examples",
                    "domain": "example.org",
                    "reason": "Potential alternative or substitute surfaced by the similarity query.",
                    "snippet": "Examples of HTTP 402 payment flows."
                  }
                ],
                "limits": {
                  "maxResults": 10,
                  "maxExcludedDomains": 10,
                  "timeoutMs": 6000,
                  "maxSeedBytes": 32768
                }
              }
            }
          },
          "routeTemplate": "/api/web/similar",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "query"
                    ],
                    "properties": {
                      "query": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 240,
                        "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages."
                      },
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page."
                      },
                      "intent": {
                        "type": "string",
                        "enum": [
                          "related",
                          "alternatives",
                          "competitors",
                          "sources"
                        ],
                        "default": "related",
                        "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references."
                      },
                      "site": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname."
                      },
                      "excludeDomains": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "maxLength": 120,
                          "description": "Exclude Domains item value for Similar Page Finder. Constraints: max length: 120."
                        },
                        "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 10,
                        "default": 5,
                        "description": "Maximum similar pages to return."
                      },
                      "freshness": {
                        "type": "string",
                        "enum": [
                          "any",
                          "day",
                          "week",
                          "month",
                          "year"
                        ],
                        "default": "any",
                        "description": "Optional freshness preference. Use any when recency is not required."
                      },
                      "includeSnippets": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 6000,
                        "description": "Search and optional seed-page fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "seed",
                      "similar",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "seed": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "similar": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "search": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "web-similar",
            "url": "https://agentbodega.store/api/web/similar",
            "method": "POST",
            "description": "Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.",
            "longDescription": "Purpose: Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nBest use: Use this when an agent needs find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: url, intent, site, excludeDomains, limit, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages. Constraints: min length: 2; max length: 240.\n- url (optional, string): Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page. Constraints: format: uri.\n- intent (optional, string): Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references. Constraints: accepted values: \"related\", \"alternatives\", \"competitors\", \"sources\"; default: \"related\".\n- site (optional, string): Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- excludeDomains (optional, array): Optional domains to omit from returned matches. The seed URL domain is omitted automatically. Constraints: max items: 10.\n- limit (optional, integer): Maximum similar pages to return. Constraints: default: 5; min: 1; max: 10.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons. Constraints: default: true.\n- timeoutMs (optional, integer): Search and optional seed-page fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"x402 paid API marketplace\",\n  \"intent\": \"alternatives\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Similar Page Finder",
            "category": "search-web",
            "kind": "web-similar-tool",
            "tags": [
              "search-web",
              "web",
              "similar",
              "related-pages",
              "alternatives",
              "competitor-research",
              "source-discovery",
              "research",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "query"
              ],
              "optional": [
                "url",
                "intent",
                "site",
                "excludeDomains",
                "limit",
                "freshness",
                "includeSnippets",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": true,
                  "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 240
                  }
                },
                {
                  "name": "url",
                  "type": "string",
                  "required": false,
                  "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "intent",
                  "type": "string",
                  "required": false,
                  "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references.",
                  "constraints": {
                    "enum": [
                      "related",
                      "alternatives",
                      "competitors",
                      "sources"
                    ],
                    "default": "related"
                  }
                },
                {
                  "name": "site",
                  "type": "string",
                  "required": false,
                  "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "excludeDomains",
                  "type": "array",
                  "required": false,
                  "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically.",
                  "constraints": {
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum similar pages to return.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 10
                  }
                },
                {
                  "name": "freshness",
                  "type": "string",
                  "required": false,
                  "description": "Optional freshness preference. Use any when recency is not required.",
                  "constraints": {
                    "enum": [
                      "any",
                      "day",
                      "week",
                      "month",
                      "year"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "includeSnippets",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Search and optional seed-page fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 6000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "x402 paid API marketplace",
                "intent": "alternatives",
                "limit": 5,
                "freshness": "any",
                "includeSnippets": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "query"
              ],
              "properties": {
                "query": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 240,
                  "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page."
                },
                "intent": {
                  "type": "string",
                  "enum": [
                    "related",
                    "alternatives",
                    "competitors",
                    "sources"
                  ],
                  "default": "related",
                  "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references."
                },
                "site": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname."
                },
                "excludeDomains": {
                  "type": "array",
                  "maxItems": 10,
                  "items": {
                    "type": "string",
                    "maxLength": 120,
                    "description": "Exclude Domains item value for Similar Page Finder. Constraints: max length: 120."
                  },
                  "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 10,
                  "default": 5,
                  "description": "Maximum similar pages to return."
                },
                "freshness": {
                  "type": "string",
                  "enum": [
                    "any",
                    "day",
                    "week",
                    "month",
                    "year"
                  ],
                  "default": "any",
                  "description": "Optional freshness preference. Use any when recency is not required."
                },
                "includeSnippets": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 6000,
                  "description": "Search and optional seed-page fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "seed",
                "similar",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "seed": {
                  "type": "object",
                  "additionalProperties": true
                },
                "similar": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "search": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/web/similar",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/web/similar",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "web-similar-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "similar",
          "aisle": "Similar Pages",
          "shelfId": "related-pages",
          "shelf": "Related Pages",
          "offeringId": "web-similar",
          "offering": "Similar Page Finder",
          "pathIds": [
            "search-web",
            "similar",
            "related-pages",
            "web-similar"
          ],
          "pathLabels": [
            "Search & Web",
            "Similar Pages",
            "Related Pages",
            "Similar Page Finder"
          ],
          "taxonomyPath": "search-web.similar.related-pages.web-similar",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "similar",
              "name": "Similar Pages"
            },
            "shelf": {
              "id": "related-pages",
              "name": "Related Pages"
            },
            "offering": {
              "id": "web-similar",
              "name": "Similar Page Finder"
            },
            "pathIds": [
              "search-web",
              "similar",
              "related-pages",
              "web-similar"
            ],
            "pathLabels": [
              "Search & Web",
              "Similar Pages",
              "Related Pages",
              "Similar Page Finder"
            ]
          }
        },
        "description": {
          "short": "Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.",
          "full": "Purpose: Find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nBest use: Use this when an agent needs find related pages, substitutes, competitor pages, or supporting sources from a topic, task, or public seed URL, with normalized source-neutral results and strict search/fetch caps.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: url, intent, site, excludeDomains, limit, freshness, includeSnippets, timeoutMs.\n\nAccepted fields:\n- query (required, string): Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages. Constraints: min length: 2; max length: 240.\n- url (optional, string): Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page. Constraints: format: uri.\n- intent (optional, string): Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references. Constraints: accepted values: \"related\", \"alternatives\", \"competitors\", \"sources\"; default: \"related\".\n- site (optional, string): Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- excludeDomains (optional, array): Optional domains to omit from returned matches. The seed URL domain is omitted automatically. Constraints: max items: 10.\n- limit (optional, integer): Maximum similar pages to return. Constraints: default: 5; min: 1; max: 10.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- includeSnippets (optional, boolean): Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons. Constraints: default: true.\n- timeoutMs (optional, integer): Search and optional seed-page fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"x402 paid API marketplace\",\n  \"intent\": \"alternatives\",\n  \"limit\": 5,\n  \"freshness\": \"any\",\n  \"includeSnippets\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page."
            },
            "intent": {
              "type": "string",
              "enum": [
                "related",
                "alternatives",
                "competitors",
                "sources"
              ],
              "default": "related",
              "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname."
            },
            "excludeDomains": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "maxLength": 120,
                "description": "Exclude Domains item value for Similar Page Finder. Constraints: max length: 120."
              },
              "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum similar pages to return."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "includeSnippets": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and optional seed-page fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page."
            },
            "intent": {
              "type": "string",
              "enum": [
                "related",
                "alternatives",
                "competitors",
                "sources"
              ],
              "default": "related",
              "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname."
            },
            "excludeDomains": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "maxLength": 120,
                "description": "Exclude Domains item value for Similar Page Finder. Constraints: max length: 120."
              },
              "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum similar pages to return."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "includeSnippets": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and optional seed-page fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "query"
          ],
          "optional": [
            "url",
            "intent",
            "site",
            "excludeDomains",
            "limit",
            "freshness",
            "includeSnippets",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": true,
              "description": "Topic, task, competitor name, or public HTTP/HTTPS URL used as the seed for finding similar pages.",
              "constraints": {
                "minLength": 2,
                "maxLength": 240
              }
            },
            {
              "name": "url",
              "type": "string",
              "required": false,
              "description": "Optional public HTTP or HTTPS seed URL. When present, AgentBodega fetches bounded metadata/text and derives the similarity query from the page.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "intent",
              "type": "string",
              "required": false,
              "description": "Similarity mode. Related finds nearby pages, alternatives finds substitutes, competitors finds competing services, and sources finds supporting references.",
              "constraints": {
                "enum": [
                  "related",
                  "alternatives",
                  "competitors",
                  "sources"
                ],
                "default": "related"
              }
            },
            {
              "name": "site",
              "type": "string",
              "required": false,
              "description": "Optional public domain scope for the search, such as example.com. URL-like values are normalized to the hostname.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "excludeDomains",
              "type": "array",
              "required": false,
              "description": "Optional domains to omit from returned matches. The seed URL domain is omitted automatically.",
              "constraints": {
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum similar pages to return.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 10
              }
            },
            {
              "name": "freshness",
              "type": "string",
              "required": false,
              "description": "Optional freshness preference. Use any when recency is not required.",
              "constraints": {
                "enum": [
                  "any",
                  "day",
                  "week",
                  "month",
                  "year"
                ],
                "default": "any"
              }
            },
            {
              "name": "includeSnippets",
              "type": "boolean",
              "required": false,
              "description": "Set false to omit snippets and return only titles, URLs, domains, ranks, and similarity reasons.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Search and optional seed-page fetch timeout in milliseconds.",
              "constraints": {
                "default": 6000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "x402 paid API marketplace",
            "intent": "alternatives",
            "limit": 5,
            "freshness": "any",
            "includeSnippets": true
          }
        },
        "exampleRequest": {
          "query": "x402 paid API marketplace",
          "intent": "alternatives",
          "limit": 5,
          "freshness": "any",
          "includeSnippets": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "seed",
            "similar",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "seed": {
              "type": "object",
              "additionalProperties": true
            },
            "similar": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "seed",
            "similar",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "seed": {
              "type": "object",
              "additionalProperties": true
            },
            "similar": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "web-similar",
            "name": "Similar Page Finder",
            "department": "Search & Web"
          },
          "requested": {
            "query": "x402 paid API marketplace",
            "url": null,
            "intent": "alternatives",
            "site": null,
            "freshness": "any",
            "excludeDomains": [],
            "limit": 5,
            "includeSnippets": true
          },
          "source": {
            "routing": "managed-web-similar",
            "upstreamDetailsDisclosed": false
          },
          "seed": {
            "type": "query",
            "query": "x402 paid API marketplace",
            "derivedQuery": "x402 paid API marketplace alternatives similar tools"
          },
          "search": {
            "query": "x402 paid API marketplace alternatives similar tools",
            "resultCount": 2,
            "checkedAt": "2026-07-07T00:00:00.000Z",
            "durationMs": 510
          },
          "similar": [
            {
              "rank": 1,
              "originalRank": 1,
              "title": "Agent Payment API Guide",
              "url": "https://example.com/agent-payments",
              "domain": "example.com",
              "reason": "Potential alternative or substitute surfaced by the similarity query.",
              "snippet": "A guide to payment-enabled API calls for agents."
            },
            {
              "rank": 2,
              "originalRank": 2,
              "title": "x402 API Examples",
              "url": "https://example.org/x402-examples",
              "domain": "example.org",
              "reason": "Potential alternative or substitute surfaced by the similarity query.",
              "snippet": "Examples of HTTP 402 payment flows."
            }
          ],
          "limits": {
            "maxResults": 10,
            "maxExcludedDomains": 10,
            "timeoutMs": 6000,
            "maxSeedBytes": 32768
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/web/answer",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Web Answer",
      "description": "Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.",
      "longDescription": "Purpose: Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nBest use: Use this when an agent needs answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, answerStyle, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Question or research task to answer from public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum search results to inspect before building the answer. Constraints: default: 5; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch and cite. Constraints: default: 3; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- answerStyle (optional, string): Brief returns a shorter answer; standard includes more evidence. Constraints: accepted values: \"brief\", \"standard\"; default: \"standard\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the answer. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"What are x402 paid APIs?\",\n  \"maxSources\": 3,\n  \"answerStyle\": \"standard\",\n  \"freshness\": \"any\"\n}\n```",
      "category": "search-web",
      "kind": "web-answer-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "answer",
      "aisle": "Answer",
      "shelfId": "cited-answers",
      "shelf": "Cited Answers",
      "offeringId": "web-answer",
      "offering": "Web Answer",
      "pathIds": [
        "search-web",
        "answer",
        "cited-answers",
        "web-answer"
      ],
      "pathLabels": [
        "Search & Web",
        "Answer",
        "Cited Answers",
        "Web Answer"
      ],
      "taxonomyPath": "search-web.answer.cited-answers.web-answer",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "answer",
          "name": "Answer"
        },
        "shelf": {
          "id": "cited-answers",
          "name": "Cited Answers"
        },
        "offering": {
          "id": "web-answer",
          "name": "Web Answer"
        },
        "pathIds": [
          "search-web",
          "answer",
          "cited-answers",
          "web-answer"
        ],
        "pathLabels": [
          "Search & Web",
          "Answer",
          "Cited Answers",
          "Web Answer"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "answer",
        "citations",
        "source-grounded",
        "research",
        "summary",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 240,
            "description": "Question or research task to answer from public web results."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "default": 5,
            "description": "Maximum search results to inspect before building the answer."
          },
          "maxSources": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "default": 3,
            "description": "Maximum result pages to fetch and cite."
          },
          "site": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
          },
          "freshness": {
            "type": "string",
            "enum": [
              "any",
              "day",
              "week",
              "month",
              "year"
            ],
            "default": "any",
            "description": "Optional freshness preference. Use any when recency is not required."
          },
          "answerStyle": {
            "type": "string",
            "enum": [
              "brief",
              "standard"
            ],
            "default": "standard",
            "description": "Brief returns a shorter answer; standard includes more evidence."
          },
          "includeSourceText": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include short source text excerpts used for the answer."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 6000,
            "description": "Search and source fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "query"
        ],
        "optional": [
          "limit",
          "maxSources",
          "site",
          "freshness",
          "answerStyle",
          "includeSourceText",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": true,
            "description": "Question or research task to answer from public web results.",
            "constraints": {
              "minLength": 2,
              "maxLength": 240
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum search results to inspect before building the answer.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 10
            }
          },
          {
            "name": "maxSources",
            "type": "integer",
            "required": false,
            "description": "Maximum result pages to fetch and cite.",
            "constraints": {
              "default": 3,
              "minimum": 1,
              "maximum": 5
            }
          },
          {
            "name": "site",
            "type": "string",
            "required": false,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "freshness",
            "type": "string",
            "required": false,
            "description": "Optional freshness preference. Use any when recency is not required.",
            "constraints": {
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any"
            }
          },
          {
            "name": "answerStyle",
            "type": "string",
            "required": false,
            "description": "Brief returns a shorter answer; standard includes more evidence.",
            "constraints": {
              "enum": [
                "brief",
                "standard"
              ],
              "default": "standard"
            }
          },
          {
            "name": "includeSourceText",
            "type": "boolean",
            "required": false,
            "description": "Set true to include short source text excerpts used for the answer.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Search and source fetch timeout in milliseconds.",
            "constraints": {
              "default": 6000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "What are x402 paid APIs?",
          "maxSources": 3,
          "answerStyle": "standard",
          "freshness": "any"
        }
      },
      "exampleRequest": {
        "query": "What are x402 paid APIs?",
        "maxSources": 3,
        "answerStyle": "standard",
        "freshness": "any"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "answer",
          "sources",
          "search",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "answer": {
            "type": "object",
            "additionalProperties": true
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "search": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "web-answer",
          "name": "Web Answer",
          "department": "Search & Web"
        },
        "requested": {
          "query": "What are x402 paid APIs?",
          "site": null,
          "freshness": "any",
          "limit": 5,
          "maxSources": 3,
          "answerStyle": "standard",
          "includeSourceText": false
        },
        "source": {
          "routing": "managed-web-answer",
          "upstreamDetailsDisclosed": false
        },
        "answer": {
          "summary": "x402 paid APIs are HTTP endpoints that return a payment challenge before fulfillment, then provide the requested JSON result after payment settlement.",
          "confidence": "medium",
          "method": "extractive_cited_summary",
          "generatedAt": "2026-07-07T00:00:00.000Z"
        },
        "sources": [
          {
            "rank": 1,
            "title": "x402 API Examples",
            "url": "https://example.org/x402-examples",
            "domain": "example.org",
            "snippet": "Examples of HTTP 402 payment flows.",
            "used": true
          }
        ],
        "search": {
          "resultCount": 2,
          "fetchedSources": 1,
          "checkedAt": "2026-07-07T00:00:00.000Z",
          "durationMs": 830
        },
        "limits": {
          "maxResults": 10,
          "maxSources": 5,
          "timeoutMs": 6000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "What are x402 paid APIs?",
                "maxSources": 3,
                "answerStyle": "standard",
                "freshness": "any"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "web-answer",
                  "name": "Web Answer",
                  "department": "Search & Web"
                },
                "requested": {
                  "query": "What are x402 paid APIs?",
                  "site": null,
                  "freshness": "any",
                  "limit": 5,
                  "maxSources": 3,
                  "answerStyle": "standard",
                  "includeSourceText": false
                },
                "source": {
                  "routing": "managed-web-answer",
                  "upstreamDetailsDisclosed": false
                },
                "answer": {
                  "summary": "x402 paid APIs are HTTP endpoints that return a payment challenge before fulfillment, then provide the requested JSON result after payment settlement.",
                  "confidence": "medium",
                  "method": "extractive_cited_summary",
                  "generatedAt": "2026-07-07T00:00:00.000Z"
                },
                "sources": [
                  {
                    "rank": 1,
                    "title": "x402 API Examples",
                    "url": "https://example.org/x402-examples",
                    "domain": "example.org",
                    "snippet": "Examples of HTTP 402 payment flows.",
                    "used": true
                  }
                ],
                "search": {
                  "resultCount": 2,
                  "fetchedSources": 1,
                  "checkedAt": "2026-07-07T00:00:00.000Z",
                  "durationMs": 830
                },
                "limits": {
                  "maxResults": 10,
                  "maxSources": 5,
                  "timeoutMs": 6000
                }
              }
            }
          },
          "routeTemplate": "/api/web/answer",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "query"
                    ],
                    "properties": {
                      "query": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 240,
                        "description": "Question or research task to answer from public web results."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 10,
                        "default": 5,
                        "description": "Maximum search results to inspect before building the answer."
                      },
                      "maxSources": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 5,
                        "default": 3,
                        "description": "Maximum result pages to fetch and cite."
                      },
                      "site": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                      },
                      "freshness": {
                        "type": "string",
                        "enum": [
                          "any",
                          "day",
                          "week",
                          "month",
                          "year"
                        ],
                        "default": "any",
                        "description": "Optional freshness preference. Use any when recency is not required."
                      },
                      "answerStyle": {
                        "type": "string",
                        "enum": [
                          "brief",
                          "standard"
                        ],
                        "default": "standard",
                        "description": "Brief returns a shorter answer; standard includes more evidence."
                      },
                      "includeSourceText": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include short source text excerpts used for the answer."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 6000,
                        "description": "Search and source fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "answer",
                      "sources",
                      "search",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "answer": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "sources": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "search": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "web-answer",
            "url": "https://agentbodega.store/api/web/answer",
            "method": "POST",
            "description": "Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.",
            "longDescription": "Purpose: Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nBest use: Use this when an agent needs answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, answerStyle, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Question or research task to answer from public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum search results to inspect before building the answer. Constraints: default: 5; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch and cite. Constraints: default: 3; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- answerStyle (optional, string): Brief returns a shorter answer; standard includes more evidence. Constraints: accepted values: \"brief\", \"standard\"; default: \"standard\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the answer. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"What are x402 paid APIs?\",\n  \"maxSources\": 3,\n  \"answerStyle\": \"standard\",\n  \"freshness\": \"any\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Web Answer",
            "category": "search-web",
            "kind": "web-answer-tool",
            "tags": [
              "search-web",
              "web",
              "answer",
              "citations",
              "source-grounded",
              "research",
              "summary",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "query"
              ],
              "optional": [
                "limit",
                "maxSources",
                "site",
                "freshness",
                "answerStyle",
                "includeSourceText",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": true,
                  "description": "Question or research task to answer from public web results.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 240
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum search results to inspect before building the answer.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 10
                  }
                },
                {
                  "name": "maxSources",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum result pages to fetch and cite.",
                  "constraints": {
                    "default": 3,
                    "minimum": 1,
                    "maximum": 5
                  }
                },
                {
                  "name": "site",
                  "type": "string",
                  "required": false,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "freshness",
                  "type": "string",
                  "required": false,
                  "description": "Optional freshness preference. Use any when recency is not required.",
                  "constraints": {
                    "enum": [
                      "any",
                      "day",
                      "week",
                      "month",
                      "year"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "answerStyle",
                  "type": "string",
                  "required": false,
                  "description": "Brief returns a shorter answer; standard includes more evidence.",
                  "constraints": {
                    "enum": [
                      "brief",
                      "standard"
                    ],
                    "default": "standard"
                  }
                },
                {
                  "name": "includeSourceText",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include short source text excerpts used for the answer.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Search and source fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 6000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "What are x402 paid APIs?",
                "maxSources": 3,
                "answerStyle": "standard",
                "freshness": "any"
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "query"
              ],
              "properties": {
                "query": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 240,
                  "description": "Question or research task to answer from public web results."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 10,
                  "default": 5,
                  "description": "Maximum search results to inspect before building the answer."
                },
                "maxSources": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 5,
                  "default": 3,
                  "description": "Maximum result pages to fetch and cite."
                },
                "site": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                },
                "freshness": {
                  "type": "string",
                  "enum": [
                    "any",
                    "day",
                    "week",
                    "month",
                    "year"
                  ],
                  "default": "any",
                  "description": "Optional freshness preference. Use any when recency is not required."
                },
                "answerStyle": {
                  "type": "string",
                  "enum": [
                    "brief",
                    "standard"
                  ],
                  "default": "standard",
                  "description": "Brief returns a shorter answer; standard includes more evidence."
                },
                "includeSourceText": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include short source text excerpts used for the answer."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 6000,
                  "description": "Search and source fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "answer",
                "sources",
                "search",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "answer": {
                  "type": "object",
                  "additionalProperties": true
                },
                "sources": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "search": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/web/answer",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/web/answer",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "web-answer-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "answer",
          "aisle": "Answer",
          "shelfId": "cited-answers",
          "shelf": "Cited Answers",
          "offeringId": "web-answer",
          "offering": "Web Answer",
          "pathIds": [
            "search-web",
            "answer",
            "cited-answers",
            "web-answer"
          ],
          "pathLabels": [
            "Search & Web",
            "Answer",
            "Cited Answers",
            "Web Answer"
          ],
          "taxonomyPath": "search-web.answer.cited-answers.web-answer",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "answer",
              "name": "Answer"
            },
            "shelf": {
              "id": "cited-answers",
              "name": "Cited Answers"
            },
            "offering": {
              "id": "web-answer",
              "name": "Web Answer"
            },
            "pathIds": [
              "search-web",
              "answer",
              "cited-answers",
              "web-answer"
            ],
            "pathLabels": [
              "Search & Web",
              "Answer",
              "Cited Answers",
              "Web Answer"
            ]
          }
        },
        "description": {
          "short": "Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.",
          "full": "Purpose: Answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nBest use: Use this when an agent needs answer a public-web research question with cited source URLs, concise extractive evidence, confidence, source fetch status, and strict search/source caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, answerStyle, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Question or research task to answer from public web results. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum search results to inspect before building the answer. Constraints: default: 5; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch and cite. Constraints: default: 3; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use any when recency is not required. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- answerStyle (optional, string): Brief returns a shorter answer; standard includes more evidence. Constraints: accepted values: \"brief\", \"standard\"; default: \"standard\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the answer. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"What are x402 paid APIs?\",\n  \"maxSources\": 3,\n  \"answerStyle\": \"standard\",\n  \"freshness\": \"any\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Question or research task to answer from public web results."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum search results to inspect before building the answer."
            },
            "maxSources": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5,
              "default": 3,
              "description": "Maximum result pages to fetch and cite."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "answerStyle": {
              "type": "string",
              "enum": [
                "brief",
                "standard"
              ],
              "default": "standard",
              "description": "Brief returns a shorter answer; standard includes more evidence."
            },
            "includeSourceText": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include short source text excerpts used for the answer."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and source fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Question or research task to answer from public web results."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Maximum search results to inspect before building the answer."
            },
            "maxSources": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5,
              "default": 3,
              "description": "Maximum result pages to fetch and cite."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use any when recency is not required."
            },
            "answerStyle": {
              "type": "string",
              "enum": [
                "brief",
                "standard"
              ],
              "default": "standard",
              "description": "Brief returns a shorter answer; standard includes more evidence."
            },
            "includeSourceText": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include short source text excerpts used for the answer."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and source fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "query"
          ],
          "optional": [
            "limit",
            "maxSources",
            "site",
            "freshness",
            "answerStyle",
            "includeSourceText",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": true,
              "description": "Question or research task to answer from public web results.",
              "constraints": {
                "minLength": 2,
                "maxLength": 240
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum search results to inspect before building the answer.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 10
              }
            },
            {
              "name": "maxSources",
              "type": "integer",
              "required": false,
              "description": "Maximum result pages to fetch and cite.",
              "constraints": {
                "default": 3,
                "minimum": 1,
                "maximum": 5
              }
            },
            {
              "name": "site",
              "type": "string",
              "required": false,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "freshness",
              "type": "string",
              "required": false,
              "description": "Optional freshness preference. Use any when recency is not required.",
              "constraints": {
                "enum": [
                  "any",
                  "day",
                  "week",
                  "month",
                  "year"
                ],
                "default": "any"
              }
            },
            {
              "name": "answerStyle",
              "type": "string",
              "required": false,
              "description": "Brief returns a shorter answer; standard includes more evidence.",
              "constraints": {
                "enum": [
                  "brief",
                  "standard"
                ],
                "default": "standard"
              }
            },
            {
              "name": "includeSourceText",
              "type": "boolean",
              "required": false,
              "description": "Set true to include short source text excerpts used for the answer.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Search and source fetch timeout in milliseconds.",
              "constraints": {
                "default": 6000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "What are x402 paid APIs?",
            "maxSources": 3,
            "answerStyle": "standard",
            "freshness": "any"
          }
        },
        "exampleRequest": {
          "query": "What are x402 paid APIs?",
          "maxSources": 3,
          "answerStyle": "standard",
          "freshness": "any"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "answer",
            "sources",
            "search",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "answer": {
              "type": "object",
              "additionalProperties": true
            },
            "sources": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "answer",
            "sources",
            "search",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "answer": {
              "type": "object",
              "additionalProperties": true
            },
            "sources": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "web-answer",
            "name": "Web Answer",
            "department": "Search & Web"
          },
          "requested": {
            "query": "What are x402 paid APIs?",
            "site": null,
            "freshness": "any",
            "limit": 5,
            "maxSources": 3,
            "answerStyle": "standard",
            "includeSourceText": false
          },
          "source": {
            "routing": "managed-web-answer",
            "upstreamDetailsDisclosed": false
          },
          "answer": {
            "summary": "x402 paid APIs are HTTP endpoints that return a payment challenge before fulfillment, then provide the requested JSON result after payment settlement.",
            "confidence": "medium",
            "method": "extractive_cited_summary",
            "generatedAt": "2026-07-07T00:00:00.000Z"
          },
          "sources": [
            {
              "rank": 1,
              "title": "x402 API Examples",
              "url": "https://example.org/x402-examples",
              "domain": "example.org",
              "snippet": "Examples of HTTP 402 payment flows.",
              "used": true
            }
          ],
          "search": {
            "resultCount": 2,
            "fetchedSources": 1,
            "checkedAt": "2026-07-07T00:00:00.000Z",
            "durationMs": 830
          },
          "limits": {
            "maxResults": 10,
            "maxSources": 5,
            "timeoutMs": 6000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/web/research-brief",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Web Research Brief",
      "description": "Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.",
      "longDescription": "Purpose: Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nBest use: Use this when an agent needs bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, format, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum public web results to inspect before selecting sources for the brief. Constraints: default: 8; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch, cite, and use as evidence. Constraints: default: 5; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use day or week for current research and any for evergreen topics. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- format (optional, string): Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured. Constraints: accepted values: \"brief\", \"bullets\", \"json\"; default: \"brief\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the brief. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"best x402 paid API discovery surfaces for agents\",\n  \"limit\": 8,\n  \"maxSources\": 5,\n  \"freshness\": \"week\",\n  \"format\": \"brief\"\n}\n```",
      "category": "search-web",
      "kind": "web-research-brief-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "answer",
      "aisle": "Answer",
      "shelfId": "research-briefs",
      "shelf": "Research Briefs",
      "offeringId": "web-research-brief",
      "offering": "Web Research Brief",
      "pathIds": [
        "search-web",
        "answer",
        "research-briefs",
        "web-research-brief"
      ],
      "pathLabels": [
        "Search & Web",
        "Answer",
        "Research Briefs",
        "Web Research Brief"
      ],
      "taxonomyPath": "search-web.answer.research-briefs.web-research-brief",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "answer",
          "name": "Answer"
        },
        "shelf": {
          "id": "research-briefs",
          "name": "Research Briefs"
        },
        "offering": {
          "id": "web-research-brief",
          "name": "Web Research Brief"
        },
        "pathIds": [
          "search-web",
          "answer",
          "research-briefs",
          "web-research-brief"
        ],
        "pathLabels": [
          "Search & Web",
          "Answer",
          "Research Briefs",
          "Web Research Brief"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "research-brief",
        "citations",
        "source-grounded",
        "summary",
        "decision-support",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "30000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "30000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 240,
            "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "default": 8,
            "description": "Maximum public web results to inspect before selecting sources for the brief."
          },
          "maxSources": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "default": 5,
            "description": "Maximum result pages to fetch, cite, and use as evidence."
          },
          "site": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
          },
          "freshness": {
            "type": "string",
            "enum": [
              "any",
              "day",
              "week",
              "month",
              "year"
            ],
            "default": "any",
            "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics."
          },
          "format": {
            "type": "string",
            "enum": [
              "brief",
              "bullets",
              "json"
            ],
            "default": "brief",
            "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured."
          },
          "includeSourceText": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include short source text excerpts used for the brief."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 6000,
            "description": "Search and source fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "query"
        ],
        "optional": [
          "limit",
          "maxSources",
          "site",
          "freshness",
          "format",
          "includeSourceText",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": true,
            "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources.",
            "constraints": {
              "minLength": 2,
              "maxLength": 240
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum public web results to inspect before selecting sources for the brief.",
            "constraints": {
              "default": 8,
              "minimum": 1,
              "maximum": 10
            }
          },
          {
            "name": "maxSources",
            "type": "integer",
            "required": false,
            "description": "Maximum result pages to fetch, cite, and use as evidence.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 5
            }
          },
          {
            "name": "site",
            "type": "string",
            "required": false,
            "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "freshness",
            "type": "string",
            "required": false,
            "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics.",
            "constraints": {
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any"
            }
          },
          {
            "name": "format",
            "type": "string",
            "required": false,
            "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured.",
            "constraints": {
              "enum": [
                "brief",
                "bullets",
                "json"
              ],
              "default": "brief"
            }
          },
          {
            "name": "includeSourceText",
            "type": "boolean",
            "required": false,
            "description": "Set true to include short source text excerpts used for the brief.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Search and source fetch timeout in milliseconds.",
            "constraints": {
              "default": 6000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "best x402 paid API discovery surfaces for agents",
          "limit": 8,
          "maxSources": 5,
          "freshness": "week",
          "format": "brief"
        }
      },
      "exampleRequest": {
        "query": "best x402 paid API discovery surfaces for agents",
        "limit": 8,
        "maxSources": 5,
        "freshness": "week",
        "format": "brief"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "brief",
          "citations",
          "sources",
          "search",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "brief": {
            "type": "object",
            "additionalProperties": true
          },
          "citations": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "search": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          },
          "providerMessage": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "web-research-brief",
          "name": "Web Research Brief",
          "department": "Search & Web"
        },
        "requested": {
          "query": "best x402 paid API discovery surfaces for agents",
          "site": null,
          "freshness": "week",
          "limit": 8,
          "maxSources": 5,
          "format": "brief",
          "includeSourceText": false
        },
        "source": {
          "routing": "managed-web-research-brief",
          "upstreamDetailsDisclosed": false
        },
        "brief": {
          "title": "Research brief: best x402 paid API discovery surfaces for agents",
          "summary": "Agents discover paid APIs through MCP directories, x402 indexes, public catalog metadata, and cited examples that explain inputs, outputs, prices, and payment rails.",
          "bullets": [
            "Directory listings help agents find paid resources before they know a specific endpoint.",
            "Cited source URLs let the caller audit where the brief came from."
          ],
          "confidence": "medium",
          "format": "brief",
          "method": "search_fetch_extract_cite",
          "generatedAt": "2026-07-07T00:00:00.000Z"
        },
        "citations": [
          {
            "id": 1,
            "title": "x402 API Examples",
            "url": "https://example.org/x402-examples",
            "domain": "example.org",
            "evidenceCount": 2
          }
        ],
        "sources": [
          {
            "rank": 1,
            "title": "x402 API Examples",
            "url": "https://example.org/x402-examples",
            "domain": "example.org",
            "used": true,
            "evidence": [
              "Examples of HTTP 402 payment flows."
            ]
          }
        ],
        "search": {
          "resultCount": 2,
          "fetchedSources": 1,
          "citedSources": 1,
          "checkedAt": "2026-07-07T00:00:00.000Z",
          "durationMs": 1180
        },
        "limits": {
          "maxResults": 10,
          "maxSources": 5,
          "timeoutMs": 6000,
          "maxSourceBytes": 32768
        },
        "providerMessage": "For related source discovery, page extraction, and cited answers, see https://agentbodega.store/directory?department=search-web"
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "best x402 paid API discovery surfaces for agents",
                "limit": 8,
                "maxSources": 5,
                "freshness": "week",
                "format": "brief"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "web-research-brief",
                  "name": "Web Research Brief",
                  "department": "Search & Web"
                },
                "requested": {
                  "query": "best x402 paid API discovery surfaces for agents",
                  "site": null,
                  "freshness": "week",
                  "limit": 8,
                  "maxSources": 5,
                  "format": "brief",
                  "includeSourceText": false
                },
                "source": {
                  "routing": "managed-web-research-brief",
                  "upstreamDetailsDisclosed": false
                },
                "brief": {
                  "title": "Research brief: best x402 paid API discovery surfaces for agents",
                  "summary": "Agents discover paid APIs through MCP directories, x402 indexes, public catalog metadata, and cited examples that explain inputs, outputs, prices, and payment rails.",
                  "bullets": [
                    "Directory listings help agents find paid resources before they know a specific endpoint.",
                    "Cited source URLs let the caller audit where the brief came from."
                  ],
                  "confidence": "medium",
                  "format": "brief",
                  "method": "search_fetch_extract_cite",
                  "generatedAt": "2026-07-07T00:00:00.000Z"
                },
                "citations": [
                  {
                    "id": 1,
                    "title": "x402 API Examples",
                    "url": "https://example.org/x402-examples",
                    "domain": "example.org",
                    "evidenceCount": 2
                  }
                ],
                "sources": [
                  {
                    "rank": 1,
                    "title": "x402 API Examples",
                    "url": "https://example.org/x402-examples",
                    "domain": "example.org",
                    "used": true,
                    "evidence": [
                      "Examples of HTTP 402 payment flows."
                    ]
                  }
                ],
                "search": {
                  "resultCount": 2,
                  "fetchedSources": 1,
                  "citedSources": 1,
                  "checkedAt": "2026-07-07T00:00:00.000Z",
                  "durationMs": 1180
                },
                "limits": {
                  "maxResults": 10,
                  "maxSources": 5,
                  "timeoutMs": 6000,
                  "maxSourceBytes": 32768
                },
                "providerMessage": "For related source discovery, page extraction, and cited answers, see https://agentbodega.store/directory?department=search-web"
              }
            }
          },
          "routeTemplate": "/api/web/research-brief",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "query"
                    ],
                    "properties": {
                      "query": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 240,
                        "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 10,
                        "default": 8,
                        "description": "Maximum public web results to inspect before selecting sources for the brief."
                      },
                      "maxSources": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 5,
                        "default": 5,
                        "description": "Maximum result pages to fetch, cite, and use as evidence."
                      },
                      "site": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                      },
                      "freshness": {
                        "type": "string",
                        "enum": [
                          "any",
                          "day",
                          "week",
                          "month",
                          "year"
                        ],
                        "default": "any",
                        "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics."
                      },
                      "format": {
                        "type": "string",
                        "enum": [
                          "brief",
                          "bullets",
                          "json"
                        ],
                        "default": "brief",
                        "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured."
                      },
                      "includeSourceText": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include short source text excerpts used for the brief."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 6000,
                        "description": "Search and source fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "brief",
                      "citations",
                      "sources",
                      "search",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "brief": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "citations": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "sources": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "search": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "providerMessage": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "web-research-brief",
            "url": "https://agentbodega.store/api/web/research-brief",
            "method": "POST",
            "description": "Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.",
            "longDescription": "Purpose: Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nBest use: Use this when an agent needs bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, format, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum public web results to inspect before selecting sources for the brief. Constraints: default: 8; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch, cite, and use as evidence. Constraints: default: 5; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use day or week for current research and any for evergreen topics. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- format (optional, string): Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured. Constraints: accepted values: \"brief\", \"bullets\", \"json\"; default: \"brief\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the brief. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"best x402 paid API discovery surfaces for agents\",\n  \"limit\": 8,\n  \"maxSources\": 5,\n  \"freshness\": \"week\",\n  \"format\": \"brief\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Web Research Brief",
            "category": "search-web",
            "kind": "web-research-brief-tool",
            "tags": [
              "search-web",
              "web",
              "research-brief",
              "citations",
              "source-grounded",
              "summary",
              "decision-support",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "query"
              ],
              "optional": [
                "limit",
                "maxSources",
                "site",
                "freshness",
                "format",
                "includeSourceText",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": true,
                  "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 240
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum public web results to inspect before selecting sources for the brief.",
                  "constraints": {
                    "default": 8,
                    "minimum": 1,
                    "maximum": 10
                  }
                },
                {
                  "name": "maxSources",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum result pages to fetch, cite, and use as evidence.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 5
                  }
                },
                {
                  "name": "site",
                  "type": "string",
                  "required": false,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "freshness",
                  "type": "string",
                  "required": false,
                  "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics.",
                  "constraints": {
                    "enum": [
                      "any",
                      "day",
                      "week",
                      "month",
                      "year"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "format",
                  "type": "string",
                  "required": false,
                  "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured.",
                  "constraints": {
                    "enum": [
                      "brief",
                      "bullets",
                      "json"
                    ],
                    "default": "brief"
                  }
                },
                {
                  "name": "includeSourceText",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include short source text excerpts used for the brief.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Search and source fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 6000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "best x402 paid API discovery surfaces for agents",
                "limit": 8,
                "maxSources": 5,
                "freshness": "week",
                "format": "brief"
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "query"
              ],
              "properties": {
                "query": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 240,
                  "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 10,
                  "default": 8,
                  "description": "Maximum public web results to inspect before selecting sources for the brief."
                },
                "maxSources": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 5,
                  "default": 5,
                  "description": "Maximum result pages to fetch, cite, and use as evidence."
                },
                "site": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
                },
                "freshness": {
                  "type": "string",
                  "enum": [
                    "any",
                    "day",
                    "week",
                    "month",
                    "year"
                  ],
                  "default": "any",
                  "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics."
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "brief",
                    "bullets",
                    "json"
                  ],
                  "default": "brief",
                  "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured."
                },
                "includeSourceText": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include short source text excerpts used for the brief."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 6000,
                  "description": "Search and source fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "brief",
                "citations",
                "sources",
                "search",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "brief": {
                  "type": "object",
                  "additionalProperties": true
                },
                "citations": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "sources": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "search": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                },
                "providerMessage": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.03"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.03",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/web/research-brief",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.03"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/web/research-brief",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "web-research-brief-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "answer",
          "aisle": "Answer",
          "shelfId": "research-briefs",
          "shelf": "Research Briefs",
          "offeringId": "web-research-brief",
          "offering": "Web Research Brief",
          "pathIds": [
            "search-web",
            "answer",
            "research-briefs",
            "web-research-brief"
          ],
          "pathLabels": [
            "Search & Web",
            "Answer",
            "Research Briefs",
            "Web Research Brief"
          ],
          "taxonomyPath": "search-web.answer.research-briefs.web-research-brief",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "answer",
              "name": "Answer"
            },
            "shelf": {
              "id": "research-briefs",
              "name": "Research Briefs"
            },
            "offering": {
              "id": "web-research-brief",
              "name": "Web Research Brief"
            },
            "pathIds": [
              "search-web",
              "answer",
              "research-briefs",
              "web-research-brief"
            ],
            "pathLabels": [
              "Search & Web",
              "Answer",
              "Research Briefs",
              "Web Research Brief"
            ]
          }
        },
        "description": {
          "short": "Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.",
          "full": "Purpose: Bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nBest use: Use this when an agent needs bundle public web search, capped source fetching, extractive summarization, and citations into one structured research brief for agents that need an answer plus supporting sources.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: query.\nOptional fields: limit, maxSources, site, freshness, format, includeSourceText, timeoutMs.\n\nAccepted fields:\n- query (required, string): Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources. Constraints: min length: 2; max length: 240.\n- limit (optional, integer): Maximum public web results to inspect before selecting sources for the brief. Constraints: default: 8; min: 1; max: 10.\n- maxSources (optional, integer): Maximum result pages to fetch, cite, and use as evidence. Constraints: default: 5; min: 1; max: 5.\n- site (optional, string): Optional public domain scope, such as example.com. URL-like values are normalized to the hostname. Constraints: max length: 120.\n- freshness (optional, string): Optional freshness preference. Use day or week for current research and any for evergreen topics. Constraints: accepted values: \"any\", \"day\", \"week\", \"month\", \"year\"; default: \"any\".\n- format (optional, string): Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured. Constraints: accepted values: \"brief\", \"bullets\", \"json\"; default: \"brief\".\n- includeSourceText (optional, boolean): Set true to include short source text excerpts used for the brief. Constraints: default: false.\n- timeoutMs (optional, integer): Search and source fetch timeout in milliseconds. Constraints: default: 6000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"query\": \"best x402 paid API discovery surfaces for agents\",\n  \"limit\": 8,\n  \"maxSources\": 5,\n  \"freshness\": \"week\",\n  \"format\": \"brief\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 8,
              "description": "Maximum public web results to inspect before selecting sources for the brief."
            },
            "maxSources": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5,
              "default": 5,
              "description": "Maximum result pages to fetch, cite, and use as evidence."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics."
            },
            "format": {
              "type": "string",
              "enum": [
                "brief",
                "bullets",
                "json"
              ],
              "default": "brief",
              "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured."
            },
            "includeSourceText": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include short source text excerpts used for the brief."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and source fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "query"
          ],
          "properties": {
            "query": {
              "type": "string",
              "minLength": 2,
              "maxLength": 240,
              "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 8,
              "description": "Maximum public web results to inspect before selecting sources for the brief."
            },
            "maxSources": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5,
              "default": 5,
              "description": "Maximum result pages to fetch, cite, and use as evidence."
            },
            "site": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname."
            },
            "freshness": {
              "type": "string",
              "enum": [
                "any",
                "day",
                "week",
                "month",
                "year"
              ],
              "default": "any",
              "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics."
            },
            "format": {
              "type": "string",
              "enum": [
                "brief",
                "bullets",
                "json"
              ],
              "default": "brief",
              "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured."
            },
            "includeSourceText": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include short source text excerpts used for the brief."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 6000,
              "description": "Search and source fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "query"
          ],
          "optional": [
            "limit",
            "maxSources",
            "site",
            "freshness",
            "format",
            "includeSourceText",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": true,
              "description": "Research question, monitoring topic, competitor query, or decision prompt to investigate from public web sources.",
              "constraints": {
                "minLength": 2,
                "maxLength": 240
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum public web results to inspect before selecting sources for the brief.",
              "constraints": {
                "default": 8,
                "minimum": 1,
                "maximum": 10
              }
            },
            {
              "name": "maxSources",
              "type": "integer",
              "required": false,
              "description": "Maximum result pages to fetch, cite, and use as evidence.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 5
              }
            },
            {
              "name": "site",
              "type": "string",
              "required": false,
              "description": "Optional public domain scope, such as example.com. URL-like values are normalized to the hostname.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "freshness",
              "type": "string",
              "required": false,
              "description": "Optional freshness preference. Use day or week for current research and any for evergreen topics.",
              "constraints": {
                "enum": [
                  "any",
                  "day",
                  "week",
                  "month",
                  "year"
                ],
                "default": "any"
              }
            },
            {
              "name": "format",
              "type": "string",
              "required": false,
              "description": "Output shape preference. Brief returns a compact narrative, bullets emphasizes extracted evidence, and json keeps sections highly structured.",
              "constraints": {
                "enum": [
                  "brief",
                  "bullets",
                  "json"
                ],
                "default": "brief"
              }
            },
            {
              "name": "includeSourceText",
              "type": "boolean",
              "required": false,
              "description": "Set true to include short source text excerpts used for the brief.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Search and source fetch timeout in milliseconds.",
              "constraints": {
                "default": 6000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "best x402 paid API discovery surfaces for agents",
            "limit": 8,
            "maxSources": 5,
            "freshness": "week",
            "format": "brief"
          }
        },
        "exampleRequest": {
          "query": "best x402 paid API discovery surfaces for agents",
          "limit": 8,
          "maxSources": 5,
          "freshness": "week",
          "format": "brief"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "brief",
            "citations",
            "sources",
            "search",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "brief": {
              "type": "object",
              "additionalProperties": true
            },
            "citations": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "sources": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            },
            "providerMessage": {
              "type": "string"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "brief",
            "citations",
            "sources",
            "search",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "brief": {
              "type": "object",
              "additionalProperties": true
            },
            "citations": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "sources": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "search": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            },
            "providerMessage": {
              "type": "string"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "web-research-brief",
            "name": "Web Research Brief",
            "department": "Search & Web"
          },
          "requested": {
            "query": "best x402 paid API discovery surfaces for agents",
            "site": null,
            "freshness": "week",
            "limit": 8,
            "maxSources": 5,
            "format": "brief",
            "includeSourceText": false
          },
          "source": {
            "routing": "managed-web-research-brief",
            "upstreamDetailsDisclosed": false
          },
          "brief": {
            "title": "Research brief: best x402 paid API discovery surfaces for agents",
            "summary": "Agents discover paid APIs through MCP directories, x402 indexes, public catalog metadata, and cited examples that explain inputs, outputs, prices, and payment rails.",
            "bullets": [
              "Directory listings help agents find paid resources before they know a specific endpoint.",
              "Cited source URLs let the caller audit where the brief came from."
            ],
            "confidence": "medium",
            "format": "brief",
            "method": "search_fetch_extract_cite",
            "generatedAt": "2026-07-07T00:00:00.000Z"
          },
          "citations": [
            {
              "id": 1,
              "title": "x402 API Examples",
              "url": "https://example.org/x402-examples",
              "domain": "example.org",
              "evidenceCount": 2
            }
          ],
          "sources": [
            {
              "rank": 1,
              "title": "x402 API Examples",
              "url": "https://example.org/x402-examples",
              "domain": "example.org",
              "used": true,
              "evidence": [
                "Examples of HTTP 402 payment flows."
              ]
            }
          ],
          "search": {
            "resultCount": 2,
            "fetchedSources": 1,
            "citedSources": 1,
            "checkedAt": "2026-07-07T00:00:00.000Z",
            "durationMs": 1180
          },
          "limits": {
            "maxResults": 10,
            "maxSources": 5,
            "timeoutMs": 6000,
            "maxSourceBytes": 32768
          },
          "providerMessage": "For related source discovery, page extraction, and cited answers, see https://agentbodega.store/directory?department=search-web"
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/developer/jwt/inspect",
      "type": "http",
      "x402Version": 2,
      "serviceName": "JWT Inspector",
      "description": "Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.",
      "longDescription": "Purpose: Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nBest use: Use this when an agent needs decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: token.\nOptional fields: expectedIssuer, expectedAudience, now, includeRaw.\n\nAccepted fields:\n- token (required, string): Compact JWT string with three dot-separated Base64URL segments. Constraints: min length: 20; max length: 8192.\n- expectedIssuer (optional, string): Optional issuer value to compare with the token iss claim. Constraints: max length: 300.\n- expectedAudience (optional, string): Optional audience value to compare with the token aud claim. Constraints: max length: 300.\n- now (optional, integer): Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time. Constraints: min: 0.\n- includeRaw (optional, boolean): Set true to include the raw header and payload objects. The signature is never returned. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature\",\n  \"expectedIssuer\": \"https://issuer.example\",\n  \"expectedAudience\": \"agent-api\",\n  \"includeRaw\": false\n}\n```",
      "category": "developer-utilities",
      "kind": "jwt-inspection-tool",
      "departmentId": "developer-utilities",
      "department": "Developer Utilities",
      "aisleId": "jwt",
      "aisle": "JWT",
      "shelfId": "inspect",
      "shelf": "Inspect",
      "offeringId": "jwt-inspector",
      "offering": "JWT Inspector",
      "pathIds": [
        "developer-utilities",
        "jwt",
        "inspect",
        "jwt-inspector"
      ],
      "pathLabels": [
        "Developer Utilities",
        "JWT",
        "Inspect",
        "JWT Inspector"
      ],
      "taxonomyPath": "developer-utilities.jwt.inspect.jwt-inspector",
      "layout": {
        "department": {
          "id": "developer-utilities",
          "name": "Developer Utilities"
        },
        "aisle": {
          "id": "jwt",
          "name": "JWT"
        },
        "shelf": {
          "id": "inspect",
          "name": "Inspect"
        },
        "offering": {
          "id": "jwt-inspector",
          "name": "JWT Inspector"
        },
        "pathIds": [
          "developer-utilities",
          "jwt",
          "inspect",
          "jwt-inspector"
        ],
        "pathLabels": [
          "Developer Utilities",
          "JWT",
          "Inspect",
          "JWT Inspector"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "developer-utilities",
        "jwt",
        "auth-debug",
        "token-inspection",
        "api-debug",
        "security",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "token"
        ],
        "properties": {
          "token": {
            "type": "string",
            "minLength": 20,
            "maxLength": 8192,
            "description": "Compact JWT string with three dot-separated Base64URL segments."
          },
          "expectedIssuer": {
            "type": "string",
            "maxLength": 300,
            "description": "Optional issuer value to compare with the token iss claim."
          },
          "expectedAudience": {
            "type": "string",
            "maxLength": 300,
            "description": "Optional audience value to compare with the token aud claim."
          },
          "now": {
            "type": "integer",
            "minimum": 0,
            "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time."
          },
          "includeRaw": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include the raw header and payload objects. The signature is never returned."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "token"
        ],
        "optional": [
          "expectedIssuer",
          "expectedAudience",
          "now",
          "includeRaw"
        ],
        "fields": [
          {
            "name": "token",
            "type": "string",
            "required": true,
            "description": "Compact JWT string with three dot-separated Base64URL segments.",
            "constraints": {
              "minLength": 20,
              "maxLength": 8192
            }
          },
          {
            "name": "expectedIssuer",
            "type": "string",
            "required": false,
            "description": "Optional issuer value to compare with the token iss claim.",
            "constraints": {
              "maxLength": 300
            }
          },
          {
            "name": "expectedAudience",
            "type": "string",
            "required": false,
            "description": "Optional audience value to compare with the token aud claim.",
            "constraints": {
              "maxLength": 300
            }
          },
          {
            "name": "now",
            "type": "integer",
            "required": false,
            "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "includeRaw",
            "type": "boolean",
            "required": false,
            "description": "Set true to include the raw header and payload objects. The signature is never returned.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
          "expectedIssuer": "https://issuer.example",
          "expectedAudience": "agent-api",
          "includeRaw": false
        }
      },
      "exampleRequest": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
        "expectedIssuer": "https://issuer.example",
        "expectedAudience": "agent-api",
        "includeRaw": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "token",
          "header",
          "claims",
          "checks",
          "warnings",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "token": {
            "type": "object",
            "additionalProperties": true
          },
          "header": {
            "type": "object",
            "additionalProperties": true
          },
          "claims": {
            "type": "object",
            "additionalProperties": true
          },
          "checks": {
            "type": "object",
            "additionalProperties": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "jwt-inspector",
          "name": "JWT Inspector",
          "department": "Developer Utilities"
        },
        "requested": {
          "expectedIssuer": "https://issuer.example",
          "expectedAudience": "agent-api",
          "includeRaw": false
        },
        "token": {
          "format": "compact-jwt",
          "segments": 3,
          "signaturePresent": true,
          "signatureVerified": false
        },
        "header": {
          "alg": "HS256",
          "typ": "JWT"
        },
        "claims": {
          "issuer": "https://issuer.example",
          "subject": "user_123",
          "audience": [
            "agent-api"
          ],
          "expiresAt": {
            "unix": 1893456000,
            "iso": "2030-01-01T00:00:00.000Z",
            "status": "valid"
          },
          "issuedAt": {
            "unix": 1704067200,
            "iso": "2024-01-01T00:00:00.000Z"
          }
        },
        "checks": {
          "issuer": "match",
          "audience": "match",
          "expired": false,
          "notBefore": "not_present",
          "issuedAtInFuture": false
        },
        "warnings": [
          "Signature was decoded but not cryptographically verified."
        ],
        "limits": {
          "maxTokenChars": 8192
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
                "expectedIssuer": "https://issuer.example",
                "expectedAudience": "agent-api",
                "includeRaw": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "jwt-inspector",
                  "name": "JWT Inspector",
                  "department": "Developer Utilities"
                },
                "requested": {
                  "expectedIssuer": "https://issuer.example",
                  "expectedAudience": "agent-api",
                  "includeRaw": false
                },
                "token": {
                  "format": "compact-jwt",
                  "segments": 3,
                  "signaturePresent": true,
                  "signatureVerified": false
                },
                "header": {
                  "alg": "HS256",
                  "typ": "JWT"
                },
                "claims": {
                  "issuer": "https://issuer.example",
                  "subject": "user_123",
                  "audience": [
                    "agent-api"
                  ],
                  "expiresAt": {
                    "unix": 1893456000,
                    "iso": "2030-01-01T00:00:00.000Z",
                    "status": "valid"
                  },
                  "issuedAt": {
                    "unix": 1704067200,
                    "iso": "2024-01-01T00:00:00.000Z"
                  }
                },
                "checks": {
                  "issuer": "match",
                  "audience": "match",
                  "expired": false,
                  "notBefore": "not_present",
                  "issuedAtInFuture": false
                },
                "warnings": [
                  "Signature was decoded but not cryptographically verified."
                ],
                "limits": {
                  "maxTokenChars": 8192
                }
              }
            }
          },
          "routeTemplate": "/api/developer/jwt/inspect",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "token"
                    ],
                    "properties": {
                      "token": {
                        "type": "string",
                        "minLength": 20,
                        "maxLength": 8192,
                        "description": "Compact JWT string with three dot-separated Base64URL segments."
                      },
                      "expectedIssuer": {
                        "type": "string",
                        "maxLength": 300,
                        "description": "Optional issuer value to compare with the token iss claim."
                      },
                      "expectedAudience": {
                        "type": "string",
                        "maxLength": 300,
                        "description": "Optional audience value to compare with the token aud claim."
                      },
                      "now": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time."
                      },
                      "includeRaw": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include the raw header and payload objects. The signature is never returned."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "token",
                      "header",
                      "claims",
                      "checks",
                      "warnings",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "token": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "header": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "claims": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checks": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "warnings": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "jwt-inspector",
            "url": "https://agentbodega.store/api/developer/jwt/inspect",
            "method": "POST",
            "description": "Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.",
            "longDescription": "Purpose: Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nBest use: Use this when an agent needs decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: token.\nOptional fields: expectedIssuer, expectedAudience, now, includeRaw.\n\nAccepted fields:\n- token (required, string): Compact JWT string with three dot-separated Base64URL segments. Constraints: min length: 20; max length: 8192.\n- expectedIssuer (optional, string): Optional issuer value to compare with the token iss claim. Constraints: max length: 300.\n- expectedAudience (optional, string): Optional audience value to compare with the token aud claim. Constraints: max length: 300.\n- now (optional, integer): Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time. Constraints: min: 0.\n- includeRaw (optional, boolean): Set true to include the raw header and payload objects. The signature is never returned. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature\",\n  \"expectedIssuer\": \"https://issuer.example\",\n  \"expectedAudience\": \"agent-api\",\n  \"includeRaw\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "JWT Inspector",
            "category": "developer-utilities",
            "kind": "jwt-inspection-tool",
            "tags": [
              "developer-utilities",
              "jwt",
              "auth-debug",
              "token-inspection",
              "api-debug",
              "security",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "token"
              ],
              "optional": [
                "expectedIssuer",
                "expectedAudience",
                "now",
                "includeRaw"
              ],
              "fields": [
                {
                  "name": "token",
                  "type": "string",
                  "required": true,
                  "description": "Compact JWT string with three dot-separated Base64URL segments.",
                  "constraints": {
                    "minLength": 20,
                    "maxLength": 8192
                  }
                },
                {
                  "name": "expectedIssuer",
                  "type": "string",
                  "required": false,
                  "description": "Optional issuer value to compare with the token iss claim.",
                  "constraints": {
                    "maxLength": 300
                  }
                },
                {
                  "name": "expectedAudience",
                  "type": "string",
                  "required": false,
                  "description": "Optional audience value to compare with the token aud claim.",
                  "constraints": {
                    "maxLength": 300
                  }
                },
                {
                  "name": "now",
                  "type": "integer",
                  "required": false,
                  "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "includeRaw",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include the raw header and payload objects. The signature is never returned.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
                "expectedIssuer": "https://issuer.example",
                "expectedAudience": "agent-api",
                "includeRaw": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "token"
              ],
              "properties": {
                "token": {
                  "type": "string",
                  "minLength": 20,
                  "maxLength": 8192,
                  "description": "Compact JWT string with three dot-separated Base64URL segments."
                },
                "expectedIssuer": {
                  "type": "string",
                  "maxLength": 300,
                  "description": "Optional issuer value to compare with the token iss claim."
                },
                "expectedAudience": {
                  "type": "string",
                  "maxLength": 300,
                  "description": "Optional audience value to compare with the token aud claim."
                },
                "now": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time."
                },
                "includeRaw": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include the raw header and payload objects. The signature is never returned."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "token",
                "header",
                "claims",
                "checks",
                "warnings",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "token": {
                  "type": "object",
                  "additionalProperties": true
                },
                "header": {
                  "type": "object",
                  "additionalProperties": true
                },
                "claims": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checks": {
                  "type": "object",
                  "additionalProperties": true
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/developer/jwt/inspect",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/developer/jwt/inspect",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "developer-utilities",
        "kind": "jwt-inspection-tool",
        "taxonomy": {
          "departmentId": "developer-utilities",
          "department": "Developer Utilities",
          "aisleId": "jwt",
          "aisle": "JWT",
          "shelfId": "inspect",
          "shelf": "Inspect",
          "offeringId": "jwt-inspector",
          "offering": "JWT Inspector",
          "pathIds": [
            "developer-utilities",
            "jwt",
            "inspect",
            "jwt-inspector"
          ],
          "pathLabels": [
            "Developer Utilities",
            "JWT",
            "Inspect",
            "JWT Inspector"
          ],
          "taxonomyPath": "developer-utilities.jwt.inspect.jwt-inspector",
          "layout": {
            "department": {
              "id": "developer-utilities",
              "name": "Developer Utilities"
            },
            "aisle": {
              "id": "jwt",
              "name": "JWT"
            },
            "shelf": {
              "id": "inspect",
              "name": "Inspect"
            },
            "offering": {
              "id": "jwt-inspector",
              "name": "JWT Inspector"
            },
            "pathIds": [
              "developer-utilities",
              "jwt",
              "inspect",
              "jwt-inspector"
            ],
            "pathLabels": [
              "Developer Utilities",
              "JWT",
              "Inspect",
              "JWT Inspector"
            ]
          }
        },
        "description": {
          "short": "Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.",
          "full": "Purpose: Decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nBest use: Use this when an agent needs decode one compact JWT without requiring a secret and return normalized header, claim timing, issuer and audience checks, signature presence, warnings, and safe debugging guidance for agent and API workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: token.\nOptional fields: expectedIssuer, expectedAudience, now, includeRaw.\n\nAccepted fields:\n- token (required, string): Compact JWT string with three dot-separated Base64URL segments. Constraints: min length: 20; max length: 8192.\n- expectedIssuer (optional, string): Optional issuer value to compare with the token iss claim. Constraints: max length: 300.\n- expectedAudience (optional, string): Optional audience value to compare with the token aud claim. Constraints: max length: 300.\n- now (optional, integer): Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time. Constraints: min: 0.\n- includeRaw (optional, boolean): Set true to include the raw header and payload objects. The signature is never returned. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature\",\n  \"expectedIssuer\": \"https://issuer.example\",\n  \"expectedAudience\": \"agent-api\",\n  \"includeRaw\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "token"
          ],
          "properties": {
            "token": {
              "type": "string",
              "minLength": 20,
              "maxLength": 8192,
              "description": "Compact JWT string with three dot-separated Base64URL segments."
            },
            "expectedIssuer": {
              "type": "string",
              "maxLength": 300,
              "description": "Optional issuer value to compare with the token iss claim."
            },
            "expectedAudience": {
              "type": "string",
              "maxLength": 300,
              "description": "Optional audience value to compare with the token aud claim."
            },
            "now": {
              "type": "integer",
              "minimum": 0,
              "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time."
            },
            "includeRaw": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include the raw header and payload objects. The signature is never returned."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "token"
          ],
          "properties": {
            "token": {
              "type": "string",
              "minLength": 20,
              "maxLength": 8192,
              "description": "Compact JWT string with three dot-separated Base64URL segments."
            },
            "expectedIssuer": {
              "type": "string",
              "maxLength": 300,
              "description": "Optional issuer value to compare with the token iss claim."
            },
            "expectedAudience": {
              "type": "string",
              "maxLength": 300,
              "description": "Optional audience value to compare with the token aud claim."
            },
            "now": {
              "type": "integer",
              "minimum": 0,
              "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time."
            },
            "includeRaw": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include the raw header and payload objects. The signature is never returned."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "token"
          ],
          "optional": [
            "expectedIssuer",
            "expectedAudience",
            "now",
            "includeRaw"
          ],
          "fields": [
            {
              "name": "token",
              "type": "string",
              "required": true,
              "description": "Compact JWT string with three dot-separated Base64URL segments.",
              "constraints": {
                "minLength": 20,
                "maxLength": 8192
              }
            },
            {
              "name": "expectedIssuer",
              "type": "string",
              "required": false,
              "description": "Optional issuer value to compare with the token iss claim.",
              "constraints": {
                "maxLength": 300
              }
            },
            {
              "name": "expectedAudience",
              "type": "string",
              "required": false,
              "description": "Optional audience value to compare with the token aud claim.",
              "constraints": {
                "maxLength": 300
              }
            },
            {
              "name": "now",
              "type": "integer",
              "required": false,
              "description": "Optional Unix timestamp in seconds for exp, nbf, and iat checks. Defaults to current time.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "includeRaw",
              "type": "boolean",
              "required": false,
              "description": "Set true to include the raw header and payload objects. The signature is never returned.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
            "expectedIssuer": "https://issuer.example",
            "expectedAudience": "agent-api",
            "includeRaw": false
          }
        },
        "exampleRequest": {
          "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlIiwiYXVkIjoiYWdlbnQtYXBpIiwic3ViIjoidXNlcl8xMjMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTcwNDA2NzIwMH0.signature",
          "expectedIssuer": "https://issuer.example",
          "expectedAudience": "agent-api",
          "includeRaw": false
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "token",
            "header",
            "claims",
            "checks",
            "warnings",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "token": {
              "type": "object",
              "additionalProperties": true
            },
            "header": {
              "type": "object",
              "additionalProperties": true
            },
            "claims": {
              "type": "object",
              "additionalProperties": true
            },
            "checks": {
              "type": "object",
              "additionalProperties": true
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "token",
            "header",
            "claims",
            "checks",
            "warnings",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "token": {
              "type": "object",
              "additionalProperties": true
            },
            "header": {
              "type": "object",
              "additionalProperties": true
            },
            "claims": {
              "type": "object",
              "additionalProperties": true
            },
            "checks": {
              "type": "object",
              "additionalProperties": true
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "jwt-inspector",
            "name": "JWT Inspector",
            "department": "Developer Utilities"
          },
          "requested": {
            "expectedIssuer": "https://issuer.example",
            "expectedAudience": "agent-api",
            "includeRaw": false
          },
          "token": {
            "format": "compact-jwt",
            "segments": 3,
            "signaturePresent": true,
            "signatureVerified": false
          },
          "header": {
            "alg": "HS256",
            "typ": "JWT"
          },
          "claims": {
            "issuer": "https://issuer.example",
            "subject": "user_123",
            "audience": [
              "agent-api"
            ],
            "expiresAt": {
              "unix": 1893456000,
              "iso": "2030-01-01T00:00:00.000Z",
              "status": "valid"
            },
            "issuedAt": {
              "unix": 1704067200,
              "iso": "2024-01-01T00:00:00.000Z"
            }
          },
          "checks": {
            "issuer": "match",
            "audience": "match",
            "expired": false,
            "notBefore": "not_present",
            "issuedAtInFuture": false
          },
          "warnings": [
            "Signature was decoded but not cryptographically verified."
          ],
          "limits": {
            "maxTokenChars": 8192
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/developer/webhook/debug",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Webhook Debugger",
      "description": "Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.",
      "longDescription": "Purpose: Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nBest use: Use this when an agent needs inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: headers, body.\nOptional fields: method, url, expectedContentType, signatureHeader, signatureSecret, signatureAlgorithm, timestampHeader, timestampToleranceSeconds, redactFields, includeBody.\n\nAccepted fields:\n- method (optional, string): HTTP method used by the webhook delivery. Constraints: accepted values: \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"GET\"; default: \"POST\".\n- url (optional, string): Optional public destination URL or callback URL to include in the debugging report. Constraints: format: uri; max length: 500.\n- headers (required, object): Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.\n- body (required, any): Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.\n- expectedContentType (optional, string): Optional content type expectation, such as application/json. Constraints: max length: 120.\n- signatureHeader (optional, string): Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature. Constraints: max length: 120.\n- signatureSecret (optional, string): Optional shared secret for HMAC verification. The secret is used only for this run and is not returned. Constraints: max length: 512.\n- signatureAlgorithm (optional, string): HMAC algorithm used when signatureSecret and signatureHeader are supplied. Constraints: accepted values: \"sha256\", \"sha1\", \"sha512\"; default: \"sha256\".\n- timestampHeader (optional, string): Optional header name that contains a delivery timestamp, used for replay-window checks. Constraints: max length: 120.\n- timestampToleranceSeconds (optional, integer): Allowed absolute timestamp age in seconds when timestampHeader is supplied. Constraints: default: 300; min: 1; max: 86400.\n- redactFields (optional, array): Case-insensitive JSON field names to redact before returning parsed body details. Constraints: max items: 20.\n- includeBody (optional, boolean): Set true to include a capped, redacted body excerpt in the response. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"method\": \"POST\",\n  \"url\": \"https://api.example.com/webhooks/orders\",\n  \"headers\": {\n    \"content-type\": \"application/json\",\n    \"x-event-type\": \"order.created\",\n    \"x-delivery-id\": \"evt_123\",\n    \"x-signature\": \"sha256=example\"\n  },\n  \"body\": {\n    \"id\": \"evt_123\",\n    \"type\": \"order.created\",\n    \"data\": {\n      \"orderId\": \"ord_123\",\n      \"amount\": 4900,\n      \"customerEmail\": \"buyer@example.com\"\n    }\n  },\n  \"expectedContentType\": \"application/json\",\n  \"signatureHeader\": \"x-signature\",\n  \"signatureAlgorithm\": \"sha256\",\n  \"timestampHeader\": \"x-webhook-timestamp\",\n  \"redactFields\": [\n    \"customerEmail\"\n  ],\n  \"includeBody\": false\n}\n```",
      "category": "developer-utilities",
      "kind": "webhook-debug-tool",
      "departmentId": "developer-utilities",
      "department": "Developer Utilities",
      "aisleId": "webhooks",
      "aisle": "Webhooks",
      "shelfId": "debug",
      "shelf": "Debug",
      "offeringId": "webhook-debugger",
      "offering": "Webhook Debugger",
      "pathIds": [
        "developer-utilities",
        "webhooks",
        "debug",
        "webhook-debugger"
      ],
      "pathLabels": [
        "Developer Utilities",
        "Webhooks",
        "Debug",
        "Webhook Debugger"
      ],
      "taxonomyPath": "developer-utilities.webhooks.debug.webhook-debugger",
      "layout": {
        "department": {
          "id": "developer-utilities",
          "name": "Developer Utilities"
        },
        "aisle": {
          "id": "webhooks",
          "name": "Webhooks"
        },
        "shelf": {
          "id": "debug",
          "name": "Debug"
        },
        "offering": {
          "id": "webhook-debugger",
          "name": "Webhook Debugger"
        },
        "pathIds": [
          "developer-utilities",
          "webhooks",
          "debug",
          "webhook-debugger"
        ],
        "pathLabels": [
          "Developer Utilities",
          "Webhooks",
          "Debug",
          "Webhook Debugger"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "developer-utilities",
        "webhook",
        "debug",
        "hmac",
        "signature",
        "headers",
        "json",
        "api-debug",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "headers",
          "body"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "POST",
              "PUT",
              "PATCH",
              "DELETE",
              "GET"
            ],
            "default": "POST",
            "description": "HTTP method used by the webhook delivery."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "maxLength": 500,
            "description": "Optional public destination URL or callback URL to include in the debugging report."
          },
          "headers": {
            "type": "object",
            "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.",
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 64
          },
          "body": {
            "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 16384
              },
              {
                "type": "object",
                "additionalProperties": true
              }
            ]
          },
          "expectedContentType": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional content type expectation, such as application/json."
          },
          "signatureHeader": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature."
          },
          "signatureSecret": {
            "type": "string",
            "maxLength": 512,
            "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned."
          },
          "signatureAlgorithm": {
            "type": "string",
            "enum": [
              "sha256",
              "sha1",
              "sha512"
            ],
            "default": "sha256",
            "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied."
          },
          "timestampHeader": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional header name that contains a delivery timestamp, used for replay-window checks."
          },
          "timestampToleranceSeconds": {
            "type": "integer",
            "minimum": 1,
            "maximum": 86400,
            "default": 300,
            "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied."
          },
          "redactFields": {
            "type": "array",
            "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
            "maxItems": 20,
            "items": {
              "type": "string",
              "maxLength": 80,
              "description": "Redact Fields item value for Webhook Debugger. Constraints: max length: 80."
            }
          },
          "includeBody": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include a capped, redacted body excerpt in the response."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "headers",
          "body"
        ],
        "optional": [
          "method",
          "url",
          "expectedContentType",
          "signatureHeader",
          "signatureSecret",
          "signatureAlgorithm",
          "timestampHeader",
          "timestampToleranceSeconds",
          "redactFields",
          "includeBody"
        ],
        "fields": [
          {
            "name": "method",
            "type": "string",
            "required": false,
            "description": "HTTP method used by the webhook delivery.",
            "constraints": {
              "enum": [
                "POST",
                "PUT",
                "PATCH",
                "DELETE",
                "GET"
              ],
              "default": "POST"
            }
          },
          {
            "name": "url",
            "type": "string",
            "required": false,
            "description": "Optional public destination URL or callback URL to include in the debugging report.",
            "constraints": {
              "format": "uri",
              "maxLength": 500
            }
          },
          {
            "name": "headers",
            "type": "object",
            "required": true,
            "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis."
          },
          {
            "name": "body",
            "type": "any",
            "required": true,
            "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing."
          },
          {
            "name": "expectedContentType",
            "type": "string",
            "required": false,
            "description": "Optional content type expectation, such as application/json.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "signatureHeader",
            "type": "string",
            "required": false,
            "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "signatureSecret",
            "type": "string",
            "required": false,
            "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned.",
            "constraints": {
              "maxLength": 512
            }
          },
          {
            "name": "signatureAlgorithm",
            "type": "string",
            "required": false,
            "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied.",
            "constraints": {
              "enum": [
                "sha256",
                "sha1",
                "sha512"
              ],
              "default": "sha256"
            }
          },
          {
            "name": "timestampHeader",
            "type": "string",
            "required": false,
            "description": "Optional header name that contains a delivery timestamp, used for replay-window checks.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "timestampToleranceSeconds",
            "type": "integer",
            "required": false,
            "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied.",
            "constraints": {
              "default": 300,
              "minimum": 1,
              "maximum": 86400
            }
          },
          {
            "name": "redactFields",
            "type": "array",
            "required": false,
            "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
            "constraints": {
              "maxItems": 20
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "includeBody",
            "type": "boolean",
            "required": false,
            "description": "Set true to include a capped, redacted body excerpt in the response.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "method": "POST",
          "url": "https://api.example.com/webhooks/orders",
          "headers": {
            "content-type": "application/json",
            "x-event-type": "order.created",
            "x-delivery-id": "evt_123",
            "x-signature": "sha256=example"
          },
          "body": {
            "id": "evt_123",
            "type": "order.created",
            "data": {
              "orderId": "ord_123",
              "amount": 4900,
              "customerEmail": "buyer@example.com"
            }
          },
          "expectedContentType": "application/json",
          "signatureHeader": "x-signature",
          "signatureAlgorithm": "sha256",
          "timestampHeader": "x-webhook-timestamp",
          "redactFields": [
            "customerEmail"
          ],
          "includeBody": false
        }
      },
      "exampleRequest": {
        "method": "POST",
        "url": "https://api.example.com/webhooks/orders",
        "headers": {
          "content-type": "application/json",
          "x-event-type": "order.created",
          "x-delivery-id": "evt_123",
          "x-signature": "sha256=example"
        },
        "body": {
          "id": "evt_123",
          "type": "order.created",
          "data": {
            "orderId": "ord_123",
            "amount": 4900,
            "customerEmail": "buyer@example.com"
          }
        },
        "expectedContentType": "application/json",
        "signatureHeader": "x-signature",
        "signatureAlgorithm": "sha256",
        "timestampHeader": "x-webhook-timestamp",
        "redactFields": [
          "customerEmail"
        ],
        "includeBody": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "headers",
          "payload",
          "signature",
          "timestamp",
          "warnings",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "headers": {
            "type": "object",
            "additionalProperties": true
          },
          "payload": {
            "type": "object",
            "additionalProperties": true
          },
          "signature": {
            "type": "object",
            "additionalProperties": true
          },
          "timestamp": {
            "type": "object",
            "additionalProperties": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "webhook-debugger",
          "name": "Webhook Debugger",
          "department": "Developer Utilities"
        },
        "requested": {
          "method": "POST",
          "url": "https://api.example.com/webhooks/orders",
          "expectedContentType": "application/json",
          "signatureHeader": "x-signature",
          "signatureAlgorithm": "sha256",
          "timestampHeader": "x-webhook-timestamp",
          "includeBody": false,
          "redactedFields": [
            "apikey",
            "api_key",
            "authorization",
            "customeremail",
            "email",
            "password",
            "secret",
            "token"
          ]
        },
        "headers": {
          "count": 5,
          "normalized": {
            "content-type": "application/json",
            "x-delivery-id": "evt_123",
            "x-event-type": "order.created",
            "x-signature": "[Redacted 71 chars]",
            "x-webhook-timestamp": "1893456000"
          },
          "notable": {
            "contentType": "application/json",
            "userAgent": null,
            "eventType": "order.created",
            "deliveryId": "evt_123"
          }
        },
        "payload": {
          "bodyType": "object",
          "bytes": 98,
          "chars": 98,
          "sha256": "c6f8453a7b3794f3f7eb8f016f891d2d55787e8f1e4d7db8651c2c3c65b4d47d",
          "json": {
            "parsed": true,
            "type": "object",
            "topLevelKeys": [
              "data",
              "id",
              "type"
            ],
            "topLevelKeyCount": 3
          },
          "parseError": null
        },
        "signature": {
          "checked": true,
          "header": "x-signature",
          "algorithm": "sha256",
          "matched": true,
          "presentedFormat": "hex",
          "presentedPrefix": "sha256=4e5b2a1c8d9f",
          "computedPrefix": "4e5b2a1c8d9f"
        },
        "timestamp": {
          "checked": true,
          "header": "x-webhook-timestamp",
          "raw": "1893456000",
          "unix": 1893456000,
          "iso": "2030-01-01T00:00:00.000Z",
          "ageSeconds": 0,
          "toleranceSeconds": 300,
          "withinTolerance": true
        },
        "warnings": [],
        "limits": {
          "maxBodyChars": 16384,
          "maxHeaders": 64,
          "maxHeaderValueChars": 1024,
          "maxRedactFields": 20
        },
        "providerMessage": "For related API inspection, JWT debugging, and source extraction tools, see https://agentbodega.store/directory?department=developer-utilities"
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "method": "POST",
                "url": "https://api.example.com/webhooks/orders",
                "headers": {
                  "content-type": "application/json",
                  "x-event-type": "order.created",
                  "x-delivery-id": "evt_123",
                  "x-signature": "sha256=example"
                },
                "body": {
                  "id": "evt_123",
                  "type": "order.created",
                  "data": {
                    "orderId": "ord_123",
                    "amount": 4900,
                    "customerEmail": "buyer@example.com"
                  }
                },
                "expectedContentType": "application/json",
                "signatureHeader": "x-signature",
                "signatureAlgorithm": "sha256",
                "timestampHeader": "x-webhook-timestamp",
                "redactFields": [
                  "customerEmail"
                ],
                "includeBody": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "webhook-debugger",
                  "name": "Webhook Debugger",
                  "department": "Developer Utilities"
                },
                "requested": {
                  "method": "POST",
                  "url": "https://api.example.com/webhooks/orders",
                  "expectedContentType": "application/json",
                  "signatureHeader": "x-signature",
                  "signatureAlgorithm": "sha256",
                  "timestampHeader": "x-webhook-timestamp",
                  "includeBody": false,
                  "redactedFields": [
                    "apikey",
                    "api_key",
                    "authorization",
                    "customeremail",
                    "email",
                    "password",
                    "secret",
                    "token"
                  ]
                },
                "headers": {
                  "count": 5,
                  "normalized": {
                    "content-type": "application/json",
                    "x-delivery-id": "evt_123",
                    "x-event-type": "order.created",
                    "x-signature": "[Redacted 71 chars]",
                    "x-webhook-timestamp": "1893456000"
                  },
                  "notable": {
                    "contentType": "application/json",
                    "userAgent": null,
                    "eventType": "order.created",
                    "deliveryId": "evt_123"
                  }
                },
                "payload": {
                  "bodyType": "object",
                  "bytes": 98,
                  "chars": 98,
                  "sha256": "c6f8453a7b3794f3f7eb8f016f891d2d55787e8f1e4d7db8651c2c3c65b4d47d",
                  "json": {
                    "parsed": true,
                    "type": "object",
                    "topLevelKeys": [
                      "data",
                      "id",
                      "type"
                    ],
                    "topLevelKeyCount": 3
                  },
                  "parseError": null
                },
                "signature": {
                  "checked": true,
                  "header": "x-signature",
                  "algorithm": "sha256",
                  "matched": true,
                  "presentedFormat": "hex",
                  "presentedPrefix": "sha256=4e5b2a1c8d9f",
                  "computedPrefix": "4e5b2a1c8d9f"
                },
                "timestamp": {
                  "checked": true,
                  "header": "x-webhook-timestamp",
                  "raw": "1893456000",
                  "unix": 1893456000,
                  "iso": "2030-01-01T00:00:00.000Z",
                  "ageSeconds": 0,
                  "toleranceSeconds": 300,
                  "withinTolerance": true
                },
                "warnings": [],
                "limits": {
                  "maxBodyChars": 16384,
                  "maxHeaders": 64,
                  "maxHeaderValueChars": 1024,
                  "maxRedactFields": 20
                },
                "providerMessage": "For related API inspection, JWT debugging, and source extraction tools, see https://agentbodega.store/directory?department=developer-utilities"
              }
            }
          },
          "routeTemplate": "/api/developer/webhook/debug",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "headers",
                      "body"
                    ],
                    "properties": {
                      "method": {
                        "type": "string",
                        "enum": [
                          "POST",
                          "PUT",
                          "PATCH",
                          "DELETE",
                          "GET"
                        ],
                        "default": "POST",
                        "description": "HTTP method used by the webhook delivery."
                      },
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "maxLength": 500,
                        "description": "Optional public destination URL or callback URL to include in the debugging report."
                      },
                      "headers": {
                        "type": "object",
                        "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.",
                        "additionalProperties": {
                          "type": "string"
                        },
                        "maxProperties": 64
                      },
                      "body": {
                        "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 16384
                          },
                          {
                            "type": "object",
                            "additionalProperties": true
                          }
                        ]
                      },
                      "expectedContentType": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional content type expectation, such as application/json."
                      },
                      "signatureHeader": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature."
                      },
                      "signatureSecret": {
                        "type": "string",
                        "maxLength": 512,
                        "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned."
                      },
                      "signatureAlgorithm": {
                        "type": "string",
                        "enum": [
                          "sha256",
                          "sha1",
                          "sha512"
                        ],
                        "default": "sha256",
                        "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied."
                      },
                      "timestampHeader": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional header name that contains a delivery timestamp, used for replay-window checks."
                      },
                      "timestampToleranceSeconds": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 86400,
                        "default": 300,
                        "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied."
                      },
                      "redactFields": {
                        "type": "array",
                        "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
                        "maxItems": 20,
                        "items": {
                          "type": "string",
                          "maxLength": 80,
                          "description": "Redact Fields item value for Webhook Debugger. Constraints: max length: 80."
                        }
                      },
                      "includeBody": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include a capped, redacted body excerpt in the response."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "headers",
                      "payload",
                      "signature",
                      "timestamp",
                      "warnings",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "headers": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "payload": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "signature": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "timestamp": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "warnings": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "webhook-debugger",
            "url": "https://agentbodega.store/api/developer/webhook/debug",
            "method": "POST",
            "description": "Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.",
            "longDescription": "Purpose: Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nBest use: Use this when an agent needs inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: headers, body.\nOptional fields: method, url, expectedContentType, signatureHeader, signatureSecret, signatureAlgorithm, timestampHeader, timestampToleranceSeconds, redactFields, includeBody.\n\nAccepted fields:\n- method (optional, string): HTTP method used by the webhook delivery. Constraints: accepted values: \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"GET\"; default: \"POST\".\n- url (optional, string): Optional public destination URL or callback URL to include in the debugging report. Constraints: format: uri; max length: 500.\n- headers (required, object): Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.\n- body (required, any): Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.\n- expectedContentType (optional, string): Optional content type expectation, such as application/json. Constraints: max length: 120.\n- signatureHeader (optional, string): Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature. Constraints: max length: 120.\n- signatureSecret (optional, string): Optional shared secret for HMAC verification. The secret is used only for this run and is not returned. Constraints: max length: 512.\n- signatureAlgorithm (optional, string): HMAC algorithm used when signatureSecret and signatureHeader are supplied. Constraints: accepted values: \"sha256\", \"sha1\", \"sha512\"; default: \"sha256\".\n- timestampHeader (optional, string): Optional header name that contains a delivery timestamp, used for replay-window checks. Constraints: max length: 120.\n- timestampToleranceSeconds (optional, integer): Allowed absolute timestamp age in seconds when timestampHeader is supplied. Constraints: default: 300; min: 1; max: 86400.\n- redactFields (optional, array): Case-insensitive JSON field names to redact before returning parsed body details. Constraints: max items: 20.\n- includeBody (optional, boolean): Set true to include a capped, redacted body excerpt in the response. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"method\": \"POST\",\n  \"url\": \"https://api.example.com/webhooks/orders\",\n  \"headers\": {\n    \"content-type\": \"application/json\",\n    \"x-event-type\": \"order.created\",\n    \"x-delivery-id\": \"evt_123\",\n    \"x-signature\": \"sha256=example\"\n  },\n  \"body\": {\n    \"id\": \"evt_123\",\n    \"type\": \"order.created\",\n    \"data\": {\n      \"orderId\": \"ord_123\",\n      \"amount\": 4900,\n      \"customerEmail\": \"buyer@example.com\"\n    }\n  },\n  \"expectedContentType\": \"application/json\",\n  \"signatureHeader\": \"x-signature\",\n  \"signatureAlgorithm\": \"sha256\",\n  \"timestampHeader\": \"x-webhook-timestamp\",\n  \"redactFields\": [\n    \"customerEmail\"\n  ],\n  \"includeBody\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Webhook Debugger",
            "category": "developer-utilities",
            "kind": "webhook-debug-tool",
            "tags": [
              "developer-utilities",
              "webhook",
              "debug",
              "hmac",
              "signature",
              "headers",
              "json",
              "api-debug",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "headers",
                "body"
              ],
              "optional": [
                "method",
                "url",
                "expectedContentType",
                "signatureHeader",
                "signatureSecret",
                "signatureAlgorithm",
                "timestampHeader",
                "timestampToleranceSeconds",
                "redactFields",
                "includeBody"
              ],
              "fields": [
                {
                  "name": "method",
                  "type": "string",
                  "required": false,
                  "description": "HTTP method used by the webhook delivery.",
                  "constraints": {
                    "enum": [
                      "POST",
                      "PUT",
                      "PATCH",
                      "DELETE",
                      "GET"
                    ],
                    "default": "POST"
                  }
                },
                {
                  "name": "url",
                  "type": "string",
                  "required": false,
                  "description": "Optional public destination URL or callback URL to include in the debugging report.",
                  "constraints": {
                    "format": "uri",
                    "maxLength": 500
                  }
                },
                {
                  "name": "headers",
                  "type": "object",
                  "required": true,
                  "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis."
                },
                {
                  "name": "body",
                  "type": "any",
                  "required": true,
                  "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing."
                },
                {
                  "name": "expectedContentType",
                  "type": "string",
                  "required": false,
                  "description": "Optional content type expectation, such as application/json.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "signatureHeader",
                  "type": "string",
                  "required": false,
                  "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "signatureSecret",
                  "type": "string",
                  "required": false,
                  "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned.",
                  "constraints": {
                    "maxLength": 512
                  }
                },
                {
                  "name": "signatureAlgorithm",
                  "type": "string",
                  "required": false,
                  "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied.",
                  "constraints": {
                    "enum": [
                      "sha256",
                      "sha1",
                      "sha512"
                    ],
                    "default": "sha256"
                  }
                },
                {
                  "name": "timestampHeader",
                  "type": "string",
                  "required": false,
                  "description": "Optional header name that contains a delivery timestamp, used for replay-window checks.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "timestampToleranceSeconds",
                  "type": "integer",
                  "required": false,
                  "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied.",
                  "constraints": {
                    "default": 300,
                    "minimum": 1,
                    "maximum": 86400
                  }
                },
                {
                  "name": "redactFields",
                  "type": "array",
                  "required": false,
                  "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
                  "constraints": {
                    "maxItems": 20
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "includeBody",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include a capped, redacted body excerpt in the response.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "method": "POST",
                "url": "https://api.example.com/webhooks/orders",
                "headers": {
                  "content-type": "application/json",
                  "x-event-type": "order.created",
                  "x-delivery-id": "evt_123",
                  "x-signature": "sha256=example"
                },
                "body": {
                  "id": "evt_123",
                  "type": "order.created",
                  "data": {
                    "orderId": "ord_123",
                    "amount": 4900,
                    "customerEmail": "buyer@example.com"
                  }
                },
                "expectedContentType": "application/json",
                "signatureHeader": "x-signature",
                "signatureAlgorithm": "sha256",
                "timestampHeader": "x-webhook-timestamp",
                "redactFields": [
                  "customerEmail"
                ],
                "includeBody": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "headers",
                "body"
              ],
              "properties": {
                "method": {
                  "type": "string",
                  "enum": [
                    "POST",
                    "PUT",
                    "PATCH",
                    "DELETE",
                    "GET"
                  ],
                  "default": "POST",
                  "description": "HTTP method used by the webhook delivery."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "maxLength": 500,
                  "description": "Optional public destination URL or callback URL to include in the debugging report."
                },
                "headers": {
                  "type": "object",
                  "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "maxProperties": 64
                },
                "body": {
                  "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.",
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 16384
                    },
                    {
                      "type": "object",
                      "additionalProperties": true
                    }
                  ]
                },
                "expectedContentType": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional content type expectation, such as application/json."
                },
                "signatureHeader": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature."
                },
                "signatureSecret": {
                  "type": "string",
                  "maxLength": 512,
                  "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned."
                },
                "signatureAlgorithm": {
                  "type": "string",
                  "enum": [
                    "sha256",
                    "sha1",
                    "sha512"
                  ],
                  "default": "sha256",
                  "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied."
                },
                "timestampHeader": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional header name that contains a delivery timestamp, used for replay-window checks."
                },
                "timestampToleranceSeconds": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 86400,
                  "default": 300,
                  "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied."
                },
                "redactFields": {
                  "type": "array",
                  "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
                  "maxItems": 20,
                  "items": {
                    "type": "string",
                    "maxLength": 80,
                    "description": "Redact Fields item value for Webhook Debugger. Constraints: max length: 80."
                  }
                },
                "includeBody": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include a capped, redacted body excerpt in the response."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "headers",
                "payload",
                "signature",
                "timestamp",
                "warnings",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "headers": {
                  "type": "object",
                  "additionalProperties": true
                },
                "payload": {
                  "type": "object",
                  "additionalProperties": true
                },
                "signature": {
                  "type": "object",
                  "additionalProperties": true
                },
                "timestamp": {
                  "type": "object",
                  "additionalProperties": true
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/developer/webhook/debug",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/developer/webhook/debug",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "developer-utilities",
        "kind": "webhook-debug-tool",
        "taxonomy": {
          "departmentId": "developer-utilities",
          "department": "Developer Utilities",
          "aisleId": "webhooks",
          "aisle": "Webhooks",
          "shelfId": "debug",
          "shelf": "Debug",
          "offeringId": "webhook-debugger",
          "offering": "Webhook Debugger",
          "pathIds": [
            "developer-utilities",
            "webhooks",
            "debug",
            "webhook-debugger"
          ],
          "pathLabels": [
            "Developer Utilities",
            "Webhooks",
            "Debug",
            "Webhook Debugger"
          ],
          "taxonomyPath": "developer-utilities.webhooks.debug.webhook-debugger",
          "layout": {
            "department": {
              "id": "developer-utilities",
              "name": "Developer Utilities"
            },
            "aisle": {
              "id": "webhooks",
              "name": "Webhooks"
            },
            "shelf": {
              "id": "debug",
              "name": "Debug"
            },
            "offering": {
              "id": "webhook-debugger",
              "name": "Webhook Debugger"
            },
            "pathIds": [
              "developer-utilities",
              "webhooks",
              "debug",
              "webhook-debugger"
            ],
            "pathLabels": [
              "Developer Utilities",
              "Webhooks",
              "Debug",
              "Webhook Debugger"
            ]
          }
        },
        "description": {
          "short": "Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.",
          "full": "Purpose: Inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nBest use: Use this when an agent needs inspect one webhook delivery payload with normalized headers, JSON parsing, safe redaction, timestamp replay-window checks, optional HMAC signature verification, warnings, and compact debugging guidance.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: headers, body.\nOptional fields: method, url, expectedContentType, signatureHeader, signatureSecret, signatureAlgorithm, timestampHeader, timestampToleranceSeconds, redactFields, includeBody.\n\nAccepted fields:\n- method (optional, string): HTTP method used by the webhook delivery. Constraints: accepted values: \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"GET\"; default: \"POST\".\n- url (optional, string): Optional public destination URL or callback URL to include in the debugging report. Constraints: format: uri; max length: 500.\n- headers (required, object): Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.\n- body (required, any): Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.\n- expectedContentType (optional, string): Optional content type expectation, such as application/json. Constraints: max length: 120.\n- signatureHeader (optional, string): Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature. Constraints: max length: 120.\n- signatureSecret (optional, string): Optional shared secret for HMAC verification. The secret is used only for this run and is not returned. Constraints: max length: 512.\n- signatureAlgorithm (optional, string): HMAC algorithm used when signatureSecret and signatureHeader are supplied. Constraints: accepted values: \"sha256\", \"sha1\", \"sha512\"; default: \"sha256\".\n- timestampHeader (optional, string): Optional header name that contains a delivery timestamp, used for replay-window checks. Constraints: max length: 120.\n- timestampToleranceSeconds (optional, integer): Allowed absolute timestamp age in seconds when timestampHeader is supplied. Constraints: default: 300; min: 1; max: 86400.\n- redactFields (optional, array): Case-insensitive JSON field names to redact before returning parsed body details. Constraints: max items: 20.\n- includeBody (optional, boolean): Set true to include a capped, redacted body excerpt in the response. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"method\": \"POST\",\n  \"url\": \"https://api.example.com/webhooks/orders\",\n  \"headers\": {\n    \"content-type\": \"application/json\",\n    \"x-event-type\": \"order.created\",\n    \"x-delivery-id\": \"evt_123\",\n    \"x-signature\": \"sha256=example\"\n  },\n  \"body\": {\n    \"id\": \"evt_123\",\n    \"type\": \"order.created\",\n    \"data\": {\n      \"orderId\": \"ord_123\",\n      \"amount\": 4900,\n      \"customerEmail\": \"buyer@example.com\"\n    }\n  },\n  \"expectedContentType\": \"application/json\",\n  \"signatureHeader\": \"x-signature\",\n  \"signatureAlgorithm\": \"sha256\",\n  \"timestampHeader\": \"x-webhook-timestamp\",\n  \"redactFields\": [\n    \"customerEmail\"\n  ],\n  \"includeBody\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "headers",
            "body"
          ],
          "properties": {
            "method": {
              "type": "string",
              "enum": [
                "POST",
                "PUT",
                "PATCH",
                "DELETE",
                "GET"
              ],
              "default": "POST",
              "description": "HTTP method used by the webhook delivery."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "maxLength": 500,
              "description": "Optional public destination URL or callback URL to include in the debugging report."
            },
            "headers": {
              "type": "object",
              "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.",
              "additionalProperties": {
                "type": "string"
              },
              "maxProperties": 64
            },
            "body": {
              "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.",
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 16384
                },
                {
                  "type": "object",
                  "additionalProperties": true
                }
              ]
            },
            "expectedContentType": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional content type expectation, such as application/json."
            },
            "signatureHeader": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature."
            },
            "signatureSecret": {
              "type": "string",
              "maxLength": 512,
              "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned."
            },
            "signatureAlgorithm": {
              "type": "string",
              "enum": [
                "sha256",
                "sha1",
                "sha512"
              ],
              "default": "sha256",
              "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied."
            },
            "timestampHeader": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional header name that contains a delivery timestamp, used for replay-window checks."
            },
            "timestampToleranceSeconds": {
              "type": "integer",
              "minimum": 1,
              "maximum": 86400,
              "default": 300,
              "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied."
            },
            "redactFields": {
              "type": "array",
              "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
              "maxItems": 20,
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Redact Fields item value for Webhook Debugger. Constraints: max length: 80."
              }
            },
            "includeBody": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include a capped, redacted body excerpt in the response."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "headers",
            "body"
          ],
          "properties": {
            "method": {
              "type": "string",
              "enum": [
                "POST",
                "PUT",
                "PATCH",
                "DELETE",
                "GET"
              ],
              "default": "POST",
              "description": "HTTP method used by the webhook delivery."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "maxLength": 500,
              "description": "Optional public destination URL or callback URL to include in the debugging report."
            },
            "headers": {
              "type": "object",
              "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis.",
              "additionalProperties": {
                "type": "string"
              },
              "maxProperties": 64
            },
            "body": {
              "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing.",
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 16384
                },
                {
                  "type": "object",
                  "additionalProperties": true
                }
              ]
            },
            "expectedContentType": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional content type expectation, such as application/json."
            },
            "signatureHeader": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature."
            },
            "signatureSecret": {
              "type": "string",
              "maxLength": 512,
              "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned."
            },
            "signatureAlgorithm": {
              "type": "string",
              "enum": [
                "sha256",
                "sha1",
                "sha512"
              ],
              "default": "sha256",
              "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied."
            },
            "timestampHeader": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional header name that contains a delivery timestamp, used for replay-window checks."
            },
            "timestampToleranceSeconds": {
              "type": "integer",
              "minimum": 1,
              "maximum": 86400,
              "default": 300,
              "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied."
            },
            "redactFields": {
              "type": "array",
              "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
              "maxItems": 20,
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Redact Fields item value for Webhook Debugger. Constraints: max length: 80."
              }
            },
            "includeBody": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include a capped, redacted body excerpt in the response."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "headers",
            "body"
          ],
          "optional": [
            "method",
            "url",
            "expectedContentType",
            "signatureHeader",
            "signatureSecret",
            "signatureAlgorithm",
            "timestampHeader",
            "timestampToleranceSeconds",
            "redactFields",
            "includeBody"
          ],
          "fields": [
            {
              "name": "method",
              "type": "string",
              "required": false,
              "description": "HTTP method used by the webhook delivery.",
              "constraints": {
                "enum": [
                  "POST",
                  "PUT",
                  "PATCH",
                  "DELETE",
                  "GET"
                ],
                "default": "POST"
              }
            },
            {
              "name": "url",
              "type": "string",
              "required": false,
              "description": "Optional public destination URL or callback URL to include in the debugging report.",
              "constraints": {
                "format": "uri",
                "maxLength": 500
              }
            },
            {
              "name": "headers",
              "type": "object",
              "required": true,
              "description": "Webhook headers as received. Header names are normalized case-insensitively and values are capped before analysis."
            },
            {
              "name": "body",
              "type": "any",
              "required": true,
              "description": "Webhook request body as a string or JSON object. Objects are canonicalized before hashing and parsing."
            },
            {
              "name": "expectedContentType",
              "type": "string",
              "required": false,
              "description": "Optional content type expectation, such as application/json.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "signatureHeader",
              "type": "string",
              "required": false,
              "description": "Optional header name that contains the webhook signature, for example x-hub-signature-256 or stripe-signature.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "signatureSecret",
              "type": "string",
              "required": false,
              "description": "Optional shared secret for HMAC verification. The secret is used only for this run and is not returned.",
              "constraints": {
                "maxLength": 512
              }
            },
            {
              "name": "signatureAlgorithm",
              "type": "string",
              "required": false,
              "description": "HMAC algorithm used when signatureSecret and signatureHeader are supplied.",
              "constraints": {
                "enum": [
                  "sha256",
                  "sha1",
                  "sha512"
                ],
                "default": "sha256"
              }
            },
            {
              "name": "timestampHeader",
              "type": "string",
              "required": false,
              "description": "Optional header name that contains a delivery timestamp, used for replay-window checks.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "timestampToleranceSeconds",
              "type": "integer",
              "required": false,
              "description": "Allowed absolute timestamp age in seconds when timestampHeader is supplied.",
              "constraints": {
                "default": 300,
                "minimum": 1,
                "maximum": 86400
              }
            },
            {
              "name": "redactFields",
              "type": "array",
              "required": false,
              "description": "Case-insensitive JSON field names to redact before returning parsed body details.",
              "constraints": {
                "maxItems": 20
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "includeBody",
              "type": "boolean",
              "required": false,
              "description": "Set true to include a capped, redacted body excerpt in the response.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "method": "POST",
            "url": "https://api.example.com/webhooks/orders",
            "headers": {
              "content-type": "application/json",
              "x-event-type": "order.created",
              "x-delivery-id": "evt_123",
              "x-signature": "sha256=example"
            },
            "body": {
              "id": "evt_123",
              "type": "order.created",
              "data": {
                "orderId": "ord_123",
                "amount": 4900,
                "customerEmail": "buyer@example.com"
              }
            },
            "expectedContentType": "application/json",
            "signatureHeader": "x-signature",
            "signatureAlgorithm": "sha256",
            "timestampHeader": "x-webhook-timestamp",
            "redactFields": [
              "customerEmail"
            ],
            "includeBody": false
          }
        },
        "exampleRequest": {
          "method": "POST",
          "url": "https://api.example.com/webhooks/orders",
          "headers": {
            "content-type": "application/json",
            "x-event-type": "order.created",
            "x-delivery-id": "evt_123",
            "x-signature": "sha256=example"
          },
          "body": {
            "id": "evt_123",
            "type": "order.created",
            "data": {
              "orderId": "ord_123",
              "amount": 4900,
              "customerEmail": "buyer@example.com"
            }
          },
          "expectedContentType": "application/json",
          "signatureHeader": "x-signature",
          "signatureAlgorithm": "sha256",
          "timestampHeader": "x-webhook-timestamp",
          "redactFields": [
            "customerEmail"
          ],
          "includeBody": false
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "headers",
            "payload",
            "signature",
            "timestamp",
            "warnings",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "headers": {
              "type": "object",
              "additionalProperties": true
            },
            "payload": {
              "type": "object",
              "additionalProperties": true
            },
            "signature": {
              "type": "object",
              "additionalProperties": true
            },
            "timestamp": {
              "type": "object",
              "additionalProperties": true
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "headers",
            "payload",
            "signature",
            "timestamp",
            "warnings",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "headers": {
              "type": "object",
              "additionalProperties": true
            },
            "payload": {
              "type": "object",
              "additionalProperties": true
            },
            "signature": {
              "type": "object",
              "additionalProperties": true
            },
            "timestamp": {
              "type": "object",
              "additionalProperties": true
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "webhook-debugger",
            "name": "Webhook Debugger",
            "department": "Developer Utilities"
          },
          "requested": {
            "method": "POST",
            "url": "https://api.example.com/webhooks/orders",
            "expectedContentType": "application/json",
            "signatureHeader": "x-signature",
            "signatureAlgorithm": "sha256",
            "timestampHeader": "x-webhook-timestamp",
            "includeBody": false,
            "redactedFields": [
              "apikey",
              "api_key",
              "authorization",
              "customeremail",
              "email",
              "password",
              "secret",
              "token"
            ]
          },
          "headers": {
            "count": 5,
            "normalized": {
              "content-type": "application/json",
              "x-delivery-id": "evt_123",
              "x-event-type": "order.created",
              "x-signature": "[Redacted 71 chars]",
              "x-webhook-timestamp": "1893456000"
            },
            "notable": {
              "contentType": "application/json",
              "userAgent": null,
              "eventType": "order.created",
              "deliveryId": "evt_123"
            }
          },
          "payload": {
            "bodyType": "object",
            "bytes": 98,
            "chars": 98,
            "sha256": "c6f8453a7b3794f3f7eb8f016f891d2d55787e8f1e4d7db8651c2c3c65b4d47d",
            "json": {
              "parsed": true,
              "type": "object",
              "topLevelKeys": [
                "data",
                "id",
                "type"
              ],
              "topLevelKeyCount": 3
            },
            "parseError": null
          },
          "signature": {
            "checked": true,
            "header": "x-signature",
            "algorithm": "sha256",
            "matched": true,
            "presentedFormat": "hex",
            "presentedPrefix": "sha256=4e5b2a1c8d9f",
            "computedPrefix": "4e5b2a1c8d9f"
          },
          "timestamp": {
            "checked": true,
            "header": "x-webhook-timestamp",
            "raw": "1893456000",
            "unix": 1893456000,
            "iso": "2030-01-01T00:00:00.000Z",
            "ageSeconds": 0,
            "toleranceSeconds": 300,
            "withinTolerance": true
          },
          "warnings": [],
          "limits": {
            "maxBodyChars": 16384,
            "maxHeaders": 64,
            "maxHeaderValueChars": 1024,
            "maxRedactFields": 20
          },
          "providerMessage": "For related API inspection, JWT debugging, and source extraction tools, see https://agentbodega.store/directory?department=developer-utilities"
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/web/fetch",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Web Page Fetch",
      "description": "Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.",
      "longDescription": "Purpose: Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nBest use: Use this when an agent needs fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeHtml, includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeHtml (optional, boolean): Set true to return a truncated sanitized HTML excerpt. Constraints: default: false.\n- includeLinks (optional, boolean): Set true to extract normalized outbound and same-page links up to maxLinks. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```",
      "category": "search-web",
      "kind": "web-extraction-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "page-extraction",
      "aisle": "Page Extraction",
      "shelfId": "fetch",
      "shelf": "Fetch",
      "offeringId": "web-fetch",
      "offering": "Web Page Fetch",
      "pathIds": [
        "search-web",
        "page-extraction",
        "fetch",
        "web-fetch"
      ],
      "pathLabels": [
        "Search & Web",
        "Page Extraction",
        "Fetch",
        "Web Page Fetch"
      ],
      "taxonomyPath": "search-web.page-extraction.fetch.web-fetch",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "page-extraction",
          "name": "Page Extraction"
        },
        "shelf": {
          "id": "fetch",
          "name": "Fetch"
        },
        "offering": {
          "id": "web-fetch",
          "name": "Web Page Fetch"
        },
        "pathIds": [
          "search-web",
          "page-extraction",
          "fetch",
          "web-fetch"
        ],
        "pathLabels": [
          "Search & Web",
          "Page Extraction",
          "Fetch",
          "Web Page Fetch"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "fetch",
        "page-extraction",
        "metadata",
        "links",
        "markdown",
        "content-extraction",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected."
          },
          "includeHtml": {
            "type": "boolean",
            "default": false,
            "description": "Set true to return a truncated sanitized HTML excerpt."
          },
          "includeLinks": {
            "type": "boolean",
            "default": true,
            "description": "Set true to extract normalized outbound and same-page links up to maxLinks."
          },
          "maxBytes": {
            "type": "integer",
            "minimum": 1024,
            "maximum": 65536,
            "default": 32768,
            "description": "Maximum response body bytes to read before truncating extraction."
          },
          "maxLinks": {
            "type": "integer",
            "minimum": 0,
            "maximum": 50,
            "default": 20,
            "description": "Maximum links to return when includeLinks is true."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 5000,
            "description": "Fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeHtml",
          "includeLinks",
          "maxBytes",
          "maxLinks",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeHtml",
            "type": "boolean",
            "required": false,
            "description": "Set true to return a truncated sanitized HTML excerpt.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "includeLinks",
            "type": "boolean",
            "required": false,
            "description": "Set true to extract normalized outbound and same-page links up to maxLinks.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "maxBytes",
            "type": "integer",
            "required": false,
            "description": "Maximum response body bytes to read before truncating extraction.",
            "constraints": {
              "default": 32768,
              "minimum": 1024,
              "maximum": 65536
            }
          },
          {
            "name": "maxLinks",
            "type": "integer",
            "required": false,
            "description": "Maximum links to return when includeLinks is true.",
            "constraints": {
              "default": 20,
              "minimum": 0,
              "maximum": 50
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Fetch timeout in milliseconds.",
            "constraints": {
              "default": 5000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeLinks": true,
        "maxBytes": 32768,
        "maxLinks": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "fetched",
          "metadata",
          "text",
          "links",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "fetched": {
            "type": "object",
            "additionalProperties": true
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true
          },
          "text": {
            "type": "object",
            "additionalProperties": true
          },
          "links": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "htmlExcerpt": {
            "type": "string"
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "web-fetch",
          "name": "Web Page Fetch",
          "department": "Search & Web"
        },
        "requested": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        },
        "fetched": {
          "finalUrl": "https://example.com/",
          "status": 200,
          "ok": true,
          "contentType": "text/html; charset=utf-8",
          "truncated": false
        },
        "metadata": {
          "title": "Example Domain",
          "description": "Example page for documentation.",
          "canonical": "https://example.com/"
        },
        "text": {
          "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
          "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
          "characters": 65,
          "words": 10
        },
        "links": [
          {
            "href": "https://www.iana.org/domains/example",
            "text": "More information",
            "rel": ""
          }
        ],
        "limits": {
          "maxBytes": 32768,
          "maxLinks": 10,
          "timeoutMs": 5000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeLinks": true,
                "maxBytes": 32768,
                "maxLinks": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "web-fetch",
                  "name": "Web Page Fetch",
                  "department": "Search & Web"
                },
                "requested": {
                  "url": "https://example.com",
                  "includeLinks": true,
                  "maxBytes": 32768,
                  "maxLinks": 10
                },
                "fetched": {
                  "finalUrl": "https://example.com/",
                  "status": 200,
                  "ok": true,
                  "contentType": "text/html; charset=utf-8",
                  "truncated": false
                },
                "metadata": {
                  "title": "Example Domain",
                  "description": "Example page for documentation.",
                  "canonical": "https://example.com/"
                },
                "text": {
                  "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
                  "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
                  "characters": 65,
                  "words": 10
                },
                "links": [
                  {
                    "href": "https://www.iana.org/domains/example",
                    "text": "More information",
                    "rel": ""
                  }
                ],
                "limits": {
                  "maxBytes": 32768,
                  "maxLinks": 10,
                  "timeoutMs": 5000
                }
              }
            }
          },
          "routeTemplate": "/api/web/fetch",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected."
                      },
                      "includeHtml": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to return a truncated sanitized HTML excerpt."
                      },
                      "includeLinks": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to extract normalized outbound and same-page links up to maxLinks."
                      },
                      "maxBytes": {
                        "type": "integer",
                        "minimum": 1024,
                        "maximum": 65536,
                        "default": 32768,
                        "description": "Maximum response body bytes to read before truncating extraction."
                      },
                      "maxLinks": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 50,
                        "default": 20,
                        "description": "Maximum links to return when includeLinks is true."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 5000,
                        "description": "Fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "fetched",
                      "metadata",
                      "text",
                      "links",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "fetched": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "metadata": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "text": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "links": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "htmlExcerpt": {
                        "type": "string"
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "web-fetch",
            "url": "https://agentbodega.store/api/web/fetch",
            "method": "POST",
            "description": "Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.",
            "longDescription": "Purpose: Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nBest use: Use this when an agent needs fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeHtml, includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeHtml (optional, boolean): Set true to return a truncated sanitized HTML excerpt. Constraints: default: false.\n- includeLinks (optional, boolean): Set true to extract normalized outbound and same-page links up to maxLinks. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Web Page Fetch",
            "category": "search-web",
            "kind": "web-extraction-tool",
            "tags": [
              "search-web",
              "web",
              "fetch",
              "page-extraction",
              "metadata",
              "links",
              "markdown",
              "content-extraction",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeHtml",
                "includeLinks",
                "maxBytes",
                "maxLinks",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeHtml",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to return a truncated sanitized HTML excerpt.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "includeLinks",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to extract normalized outbound and same-page links up to maxLinks.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "maxBytes",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum response body bytes to read before truncating extraction.",
                  "constraints": {
                    "default": 32768,
                    "minimum": 1024,
                    "maximum": 65536
                  }
                },
                {
                  "name": "maxLinks",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum links to return when includeLinks is true.",
                  "constraints": {
                    "default": 20,
                    "minimum": 0,
                    "maximum": 50
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 5000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeLinks": true,
                "maxBytes": 32768,
                "maxLinks": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected."
                },
                "includeHtml": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to return a truncated sanitized HTML excerpt."
                },
                "includeLinks": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to extract normalized outbound and same-page links up to maxLinks."
                },
                "maxBytes": {
                  "type": "integer",
                  "minimum": 1024,
                  "maximum": 65536,
                  "default": 32768,
                  "description": "Maximum response body bytes to read before truncating extraction."
                },
                "maxLinks": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 50,
                  "default": 20,
                  "description": "Maximum links to return when includeLinks is true."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 5000,
                  "description": "Fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "fetched",
                "metadata",
                "text",
                "links",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "fetched": {
                  "type": "object",
                  "additionalProperties": true
                },
                "metadata": {
                  "type": "object",
                  "additionalProperties": true
                },
                "text": {
                  "type": "object",
                  "additionalProperties": true
                },
                "links": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "htmlExcerpt": {
                  "type": "string"
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/web/fetch",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/web/fetch",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "web-extraction-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "page-extraction",
          "aisle": "Page Extraction",
          "shelfId": "fetch",
          "shelf": "Fetch",
          "offeringId": "web-fetch",
          "offering": "Web Page Fetch",
          "pathIds": [
            "search-web",
            "page-extraction",
            "fetch",
            "web-fetch"
          ],
          "pathLabels": [
            "Search & Web",
            "Page Extraction",
            "Fetch",
            "Web Page Fetch"
          ],
          "taxonomyPath": "search-web.page-extraction.fetch.web-fetch",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "page-extraction",
              "name": "Page Extraction"
            },
            "shelf": {
              "id": "fetch",
              "name": "Fetch"
            },
            "offering": {
              "id": "web-fetch",
              "name": "Web Page Fetch"
            },
            "pathIds": [
              "search-web",
              "page-extraction",
              "fetch",
              "web-fetch"
            ],
            "pathLabels": [
              "Search & Web",
              "Page Extraction",
              "Fetch",
              "Web Page Fetch"
            ]
          }
        },
        "description": {
          "short": "Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.",
          "full": "Purpose: Fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nBest use: Use this when an agent needs fetch one public URL and return normalized page metadata, cleaned text, markdown, links, status, content type, and extraction limits for agent workflows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeHtml, includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeHtml (optional, boolean): Set true to return a truncated sanitized HTML excerpt. Constraints: default: false.\n- includeLinks (optional, boolean): Set true to extract normalized outbound and same-page links up to maxLinks. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected."
            },
            "includeHtml": {
              "type": "boolean",
              "default": false,
              "description": "Set true to return a truncated sanitized HTML excerpt."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "Set true to extract normalized outbound and same-page links up to maxLinks."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read before truncating extraction."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "Maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected."
            },
            "includeHtml": {
              "type": "boolean",
              "default": false,
              "description": "Set true to return a truncated sanitized HTML excerpt."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "Set true to extract normalized outbound and same-page links up to maxLinks."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read before truncating extraction."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "Maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeHtml",
            "includeLinks",
            "maxBytes",
            "maxLinks",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Public HTTP or HTTPS URL to fetch. Local, private, and non-web schemes are rejected.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeHtml",
              "type": "boolean",
              "required": false,
              "description": "Set true to return a truncated sanitized HTML excerpt.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "includeLinks",
              "type": "boolean",
              "required": false,
              "description": "Set true to extract normalized outbound and same-page links up to maxLinks.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "maxBytes",
              "type": "integer",
              "required": false,
              "description": "Maximum response body bytes to read before truncating extraction.",
              "constraints": {
                "default": 32768,
                "minimum": 1024,
                "maximum": 65536
              }
            },
            {
              "name": "maxLinks",
              "type": "integer",
              "required": false,
              "description": "Maximum links to return when includeLinks is true.",
              "constraints": {
                "default": 20,
                "minimum": 0,
                "maximum": 50
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Fetch timeout in milliseconds.",
              "constraints": {
                "default": 5000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeLinks": true,
            "maxBytes": 32768,
            "maxLinks": 10
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "metadata",
            "text",
            "links",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "metadata": {
              "type": "object",
              "additionalProperties": true
            },
            "text": {
              "type": "object",
              "additionalProperties": true
            },
            "links": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "htmlExcerpt": {
              "type": "string"
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "metadata",
            "text",
            "links",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "metadata": {
              "type": "object",
              "additionalProperties": true
            },
            "text": {
              "type": "object",
              "additionalProperties": true
            },
            "links": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "htmlExcerpt": {
              "type": "string"
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "web-fetch",
            "name": "Web Page Fetch",
            "department": "Search & Web"
          },
          "requested": {
            "url": "https://example.com",
            "includeLinks": true,
            "maxBytes": 32768,
            "maxLinks": 10
          },
          "fetched": {
            "finalUrl": "https://example.com/",
            "status": 200,
            "ok": true,
            "contentType": "text/html; charset=utf-8",
            "truncated": false
          },
          "metadata": {
            "title": "Example Domain",
            "description": "Example page for documentation.",
            "canonical": "https://example.com/"
          },
          "text": {
            "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
            "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
            "characters": 65,
            "words": 10
          },
          "links": [
            {
              "href": "https://www.iana.org/domains/example",
              "text": "More information",
              "rel": ""
            }
          ],
          "limits": {
            "maxBytes": 32768,
            "maxLinks": 10,
            "timeoutMs": 5000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/search/link-preview",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Link Preview",
      "description": "Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.",
      "longDescription": "Purpose: Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nBest use: Use this when an agent needs fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeImage, maxBytes, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected. Constraints: format: uri.\n- includeImage (optional, boolean): Set false to omit preview image metadata while still returning title, description, and canonical URL. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read while extracting preview tags. Constraints: default: 32768; min: 1024; max: 65536.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeImage\": true,\n  \"maxBytes\": 32768\n}\n```",
      "category": "search-web",
      "kind": "link-preview-tool",
      "departmentId": "search-web",
      "department": "Search & Web",
      "aisleId": "page-extraction",
      "aisle": "Page Extraction",
      "shelfId": "link-preview",
      "shelf": "Link Preview",
      "offeringId": "link-preview",
      "offering": "Link Preview",
      "pathIds": [
        "search-web",
        "page-extraction",
        "link-preview",
        "link-preview"
      ],
      "pathLabels": [
        "Search & Web",
        "Page Extraction",
        "Link Preview",
        "Link Preview"
      ],
      "taxonomyPath": "search-web.page-extraction.link-preview.link-preview",
      "layout": {
        "department": {
          "id": "search-web",
          "name": "Search & Web"
        },
        "aisle": {
          "id": "page-extraction",
          "name": "Page Extraction"
        },
        "shelf": {
          "id": "link-preview",
          "name": "Link Preview"
        },
        "offering": {
          "id": "link-preview",
          "name": "Link Preview"
        },
        "pathIds": [
          "search-web",
          "page-extraction",
          "link-preview",
          "link-preview"
        ],
        "pathLabels": [
          "Search & Web",
          "Page Extraction",
          "Link Preview",
          "Link Preview"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "search-web",
        "web",
        "link-preview",
        "open-graph",
        "metadata",
        "page-extraction",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected."
          },
          "includeImage": {
            "type": "boolean",
            "default": true,
            "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL."
          },
          "maxBytes": {
            "type": "integer",
            "minimum": 1024,
            "maximum": 65536,
            "default": 32768,
            "description": "Maximum response body bytes to read while extracting preview tags."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 5000,
            "description": "Fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeImage",
          "maxBytes",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeImage",
            "type": "boolean",
            "required": false,
            "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "maxBytes",
            "type": "integer",
            "required": false,
            "description": "Maximum response body bytes to read while extracting preview tags.",
            "constraints": {
              "default": 32768,
              "minimum": 1024,
              "maximum": 65536
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Fetch timeout in milliseconds.",
            "constraints": {
              "default": 5000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeImage": true,
          "maxBytes": 32768
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeImage": true,
        "maxBytes": 32768
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "fetched",
          "preview",
          "signals",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "fetched": {
            "type": "object",
            "additionalProperties": true
          },
          "preview": {
            "type": "object",
            "additionalProperties": true
          },
          "signals": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "link-preview",
          "name": "Link Preview",
          "department": "Search & Web"
        },
        "requested": {
          "url": "https://example.com",
          "includeImage": true,
          "maxBytes": 32768,
          "timeoutMs": 5000
        },
        "source": {
          "routing": "direct-public-fetch",
          "upstreamDetailsDisclosed": false
        },
        "fetched": {
          "finalUrl": "https://example.com/",
          "status": 200,
          "ok": true,
          "contentType": "text/html; charset=utf-8",
          "truncated": false
        },
        "preview": {
          "title": "Example Domain",
          "description": "Example page for documentation.",
          "canonicalUrl": "https://example.com/",
          "url": "https://example.com/",
          "domain": "example.com",
          "siteName": "",
          "type": "",
          "image": null,
          "language": "en"
        },
        "signals": {
          "title": "title",
          "description": "meta:description",
          "canonicalUrl": "link:canonical",
          "siteName": "none",
          "type": "none",
          "image": "none"
        },
        "limits": {
          "maxBytes": 32768,
          "timeoutMs": 5000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeImage": true,
                "maxBytes": 32768
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "link-preview",
                  "name": "Link Preview",
                  "department": "Search & Web"
                },
                "requested": {
                  "url": "https://example.com",
                  "includeImage": true,
                  "maxBytes": 32768,
                  "timeoutMs": 5000
                },
                "source": {
                  "routing": "direct-public-fetch",
                  "upstreamDetailsDisclosed": false
                },
                "fetched": {
                  "finalUrl": "https://example.com/",
                  "status": 200,
                  "ok": true,
                  "contentType": "text/html; charset=utf-8",
                  "truncated": false
                },
                "preview": {
                  "title": "Example Domain",
                  "description": "Example page for documentation.",
                  "canonicalUrl": "https://example.com/",
                  "url": "https://example.com/",
                  "domain": "example.com",
                  "siteName": "",
                  "type": "",
                  "image": null,
                  "language": "en"
                },
                "signals": {
                  "title": "title",
                  "description": "meta:description",
                  "canonicalUrl": "link:canonical",
                  "siteName": "none",
                  "type": "none",
                  "image": "none"
                },
                "limits": {
                  "maxBytes": 32768,
                  "timeoutMs": 5000
                }
              }
            }
          },
          "routeTemplate": "/api/search/link-preview",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected."
                      },
                      "includeImage": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL."
                      },
                      "maxBytes": {
                        "type": "integer",
                        "minimum": 1024,
                        "maximum": 65536,
                        "default": 32768,
                        "description": "Maximum response body bytes to read while extracting preview tags."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 5000,
                        "description": "Fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "fetched",
                      "preview",
                      "signals",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "fetched": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "preview": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "signals": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "link-preview",
            "url": "https://agentbodega.store/api/search/link-preview",
            "method": "POST",
            "description": "Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.",
            "longDescription": "Purpose: Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nBest use: Use this when an agent needs fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeImage, maxBytes, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected. Constraints: format: uri.\n- includeImage (optional, boolean): Set false to omit preview image metadata while still returning title, description, and canonical URL. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read while extracting preview tags. Constraints: default: 32768; min: 1024; max: 65536.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeImage\": true,\n  \"maxBytes\": 32768\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Link Preview",
            "category": "search-web",
            "kind": "link-preview-tool",
            "tags": [
              "search-web",
              "web",
              "link-preview",
              "open-graph",
              "metadata",
              "page-extraction",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeImage",
                "maxBytes",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeImage",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "maxBytes",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum response body bytes to read while extracting preview tags.",
                  "constraints": {
                    "default": 32768,
                    "minimum": 1024,
                    "maximum": 65536
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 5000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeImage": true,
                "maxBytes": 32768
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected."
                },
                "includeImage": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL."
                },
                "maxBytes": {
                  "type": "integer",
                  "minimum": 1024,
                  "maximum": 65536,
                  "default": 32768,
                  "description": "Maximum response body bytes to read while extracting preview tags."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 5000,
                  "description": "Fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "fetched",
                "preview",
                "signals",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "fetched": {
                  "type": "object",
                  "additionalProperties": true
                },
                "preview": {
                  "type": "object",
                  "additionalProperties": true
                },
                "signals": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/search/link-preview",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/search/link-preview",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "search-web",
        "kind": "link-preview-tool",
        "taxonomy": {
          "departmentId": "search-web",
          "department": "Search & Web",
          "aisleId": "page-extraction",
          "aisle": "Page Extraction",
          "shelfId": "link-preview",
          "shelf": "Link Preview",
          "offeringId": "link-preview",
          "offering": "Link Preview",
          "pathIds": [
            "search-web",
            "page-extraction",
            "link-preview",
            "link-preview"
          ],
          "pathLabels": [
            "Search & Web",
            "Page Extraction",
            "Link Preview",
            "Link Preview"
          ],
          "taxonomyPath": "search-web.page-extraction.link-preview.link-preview",
          "layout": {
            "department": {
              "id": "search-web",
              "name": "Search & Web"
            },
            "aisle": {
              "id": "page-extraction",
              "name": "Page Extraction"
            },
            "shelf": {
              "id": "link-preview",
              "name": "Link Preview"
            },
            "offering": {
              "id": "link-preview",
              "name": "Link Preview"
            },
            "pathIds": [
              "search-web",
              "page-extraction",
              "link-preview",
              "link-preview"
            ],
            "pathLabels": [
              "Search & Web",
              "Page Extraction",
              "Link Preview",
              "Link Preview"
            ]
          }
        },
        "description": {
          "short": "Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.",
          "full": "Purpose: Fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nBest use: Use this when an agent needs fetch one public URL and return compact source-neutral preview metadata: title, description, canonical URL, site name, type, image URL when present, and which HTML signals supplied each field.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeImage, maxBytes, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected. Constraints: format: uri.\n- includeImage (optional, boolean): Set false to omit preview image metadata while still returning title, description, and canonical URL. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read while extracting preview tags. Constraints: default: 32768; min: 1024; max: 65536.\n- timeoutMs (optional, integer): Fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeImage\": true,\n  \"maxBytes\": 32768\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected."
            },
            "includeImage": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read while extracting preview tags."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected."
            },
            "includeImage": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read while extracting preview tags."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeImage",
            "maxBytes",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Public HTTP or HTTPS URL to preview. Local, private, credentialed, and non-web URLs are rejected.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeImage",
              "type": "boolean",
              "required": false,
              "description": "Set false to omit preview image metadata while still returning title, description, and canonical URL.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "maxBytes",
              "type": "integer",
              "required": false,
              "description": "Maximum response body bytes to read while extracting preview tags.",
              "constraints": {
                "default": 32768,
                "minimum": 1024,
                "maximum": 65536
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Fetch timeout in milliseconds.",
              "constraints": {
                "default": 5000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeImage": true,
            "maxBytes": 32768
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeImage": true,
          "maxBytes": 32768
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "preview",
            "signals",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "preview": {
              "type": "object",
              "additionalProperties": true
            },
            "signals": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "preview",
            "signals",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "preview": {
              "type": "object",
              "additionalProperties": true
            },
            "signals": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "link-preview",
            "name": "Link Preview",
            "department": "Search & Web"
          },
          "requested": {
            "url": "https://example.com",
            "includeImage": true,
            "maxBytes": 32768,
            "timeoutMs": 5000
          },
          "source": {
            "routing": "direct-public-fetch",
            "upstreamDetailsDisclosed": false
          },
          "fetched": {
            "finalUrl": "https://example.com/",
            "status": 200,
            "ok": true,
            "contentType": "text/html; charset=utf-8",
            "truncated": false
          },
          "preview": {
            "title": "Example Domain",
            "description": "Example page for documentation.",
            "canonicalUrl": "https://example.com/",
            "url": "https://example.com/",
            "domain": "example.com",
            "siteName": "",
            "type": "",
            "image": null,
            "language": "en"
          },
          "signals": {
            "title": "title",
            "description": "meta:description",
            "canonicalUrl": "link:canonical",
            "siteName": "none",
            "type": "none",
            "image": "none"
          },
          "limits": {
            "maxBytes": 32768,
            "timeoutMs": 5000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/documents/any-to-markdown",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Any URL to Markdown",
      "description": "Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.",
      "longDescription": "Purpose: Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nBest use: Use this when an agent needs convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeLinks (optional, boolean): Set true to include normalized links that were visible in the source content. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating the markdown extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch and extraction timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```",
      "category": "documents-content",
      "kind": "content-extraction-tool",
      "departmentId": "documents-content",
      "department": "Documents & Content",
      "aisleId": "extraction",
      "aisle": "Extraction",
      "shelfId": "url-to-markdown",
      "shelf": "Url To Markdown",
      "offeringId": "any-to-markdown",
      "offering": "Any URL to Markdown",
      "pathIds": [
        "documents-content",
        "extraction",
        "url-to-markdown",
        "any-to-markdown"
      ],
      "pathLabels": [
        "Documents & Content",
        "Extraction",
        "Url To Markdown",
        "Any URL to Markdown"
      ],
      "taxonomyPath": "documents-content.extraction.url-to-markdown.any-to-markdown",
      "layout": {
        "department": {
          "id": "documents-content",
          "name": "Documents & Content"
        },
        "aisle": {
          "id": "extraction",
          "name": "Extraction"
        },
        "shelf": {
          "id": "url-to-markdown",
          "name": "Url To Markdown"
        },
        "offering": {
          "id": "any-to-markdown",
          "name": "Any URL to Markdown"
        },
        "pathIds": [
          "documents-content",
          "extraction",
          "url-to-markdown",
          "any-to-markdown"
        ],
        "pathLabels": [
          "Documents & Content",
          "Extraction",
          "Url To Markdown",
          "Any URL to Markdown"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "documents-content",
        "markdown",
        "content-extraction",
        "rag-prep",
        "clean-text",
        "links",
        "metadata",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected."
          },
          "includeLinks": {
            "type": "boolean",
            "default": true,
            "description": "Set true to include normalized links that were visible in the source content."
          },
          "maxBytes": {
            "type": "integer",
            "minimum": 1024,
            "maximum": 65536,
            "default": 32768,
            "description": "Maximum response body bytes to read before truncating the markdown extraction."
          },
          "maxLinks": {
            "type": "integer",
            "minimum": 0,
            "maximum": 50,
            "default": 20,
            "description": "Maximum links to return when includeLinks is true."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 5000,
            "description": "Fetch and extraction timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeLinks",
          "maxBytes",
          "maxLinks",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeLinks",
            "type": "boolean",
            "required": false,
            "description": "Set true to include normalized links that were visible in the source content.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "maxBytes",
            "type": "integer",
            "required": false,
            "description": "Maximum response body bytes to read before truncating the markdown extraction.",
            "constraints": {
              "default": 32768,
              "minimum": 1024,
              "maximum": 65536
            }
          },
          {
            "name": "maxLinks",
            "type": "integer",
            "required": false,
            "description": "Maximum links to return when includeLinks is true.",
            "constraints": {
              "default": 20,
              "minimum": 0,
              "maximum": 50
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "Fetch and extraction timeout in milliseconds.",
            "constraints": {
              "default": 5000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeLinks": true,
        "maxBytes": 32768,
        "maxLinks": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "fetched",
          "metadata",
          "text",
          "links",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "fetched": {
            "type": "object",
            "additionalProperties": true
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true
          },
          "text": {
            "type": "object",
            "additionalProperties": true
          },
          "links": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "any-to-markdown",
          "name": "Any URL to Markdown",
          "department": "Documents & Content"
        },
        "requested": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        },
        "fetched": {
          "finalUrl": "https://example.com/",
          "status": 200,
          "ok": true,
          "contentType": "text/html; charset=utf-8",
          "truncated": false
        },
        "metadata": {
          "title": "Example Domain",
          "description": "Example page for documentation.",
          "canonical": "https://example.com/"
        },
        "text": {
          "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
          "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
          "characters": 65,
          "words": 10
        },
        "links": [
          {
            "href": "https://www.iana.org/domains/example",
            "text": "More information",
            "rel": ""
          }
        ],
        "limits": {
          "maxBytes": 32768,
          "maxLinks": 10,
          "timeoutMs": 5000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeLinks": true,
                "maxBytes": 32768,
                "maxLinks": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "any-to-markdown",
                  "name": "Any URL to Markdown",
                  "department": "Documents & Content"
                },
                "requested": {
                  "url": "https://example.com",
                  "includeLinks": true,
                  "maxBytes": 32768,
                  "maxLinks": 10
                },
                "fetched": {
                  "finalUrl": "https://example.com/",
                  "status": 200,
                  "ok": true,
                  "contentType": "text/html; charset=utf-8",
                  "truncated": false
                },
                "metadata": {
                  "title": "Example Domain",
                  "description": "Example page for documentation.",
                  "canonical": "https://example.com/"
                },
                "text": {
                  "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
                  "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
                  "characters": 65,
                  "words": 10
                },
                "links": [
                  {
                    "href": "https://www.iana.org/domains/example",
                    "text": "More information",
                    "rel": ""
                  }
                ],
                "limits": {
                  "maxBytes": 32768,
                  "maxLinks": 10,
                  "timeoutMs": 5000
                }
              }
            }
          },
          "routeTemplate": "/api/documents/any-to-markdown",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected."
                      },
                      "includeLinks": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to include normalized links that were visible in the source content."
                      },
                      "maxBytes": {
                        "type": "integer",
                        "minimum": 1024,
                        "maximum": 65536,
                        "default": 32768,
                        "description": "Maximum response body bytes to read before truncating the markdown extraction."
                      },
                      "maxLinks": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 50,
                        "default": 20,
                        "description": "Maximum links to return when includeLinks is true."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 5000,
                        "description": "Fetch and extraction timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "fetched",
                      "metadata",
                      "text",
                      "links",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "fetched": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "metadata": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "text": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "links": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "any-to-markdown",
            "url": "https://agentbodega.store/api/documents/any-to-markdown",
            "method": "POST",
            "description": "Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.",
            "longDescription": "Purpose: Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nBest use: Use this when an agent needs convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeLinks (optional, boolean): Set true to include normalized links that were visible in the source content. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating the markdown extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch and extraction timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Any URL to Markdown",
            "category": "documents-content",
            "kind": "content-extraction-tool",
            "tags": [
              "documents-content",
              "markdown",
              "content-extraction",
              "rag-prep",
              "clean-text",
              "links",
              "metadata",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeLinks",
                "maxBytes",
                "maxLinks",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeLinks",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include normalized links that were visible in the source content.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "maxBytes",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum response body bytes to read before truncating the markdown extraction.",
                  "constraints": {
                    "default": 32768,
                    "minimum": 1024,
                    "maximum": 65536
                  }
                },
                {
                  "name": "maxLinks",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum links to return when includeLinks is true.",
                  "constraints": {
                    "default": 20,
                    "minimum": 0,
                    "maximum": 50
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "Fetch and extraction timeout in milliseconds.",
                  "constraints": {
                    "default": 5000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeLinks": true,
                "maxBytes": 32768,
                "maxLinks": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected."
                },
                "includeLinks": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to include normalized links that were visible in the source content."
                },
                "maxBytes": {
                  "type": "integer",
                  "minimum": 1024,
                  "maximum": 65536,
                  "default": 32768,
                  "description": "Maximum response body bytes to read before truncating the markdown extraction."
                },
                "maxLinks": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 50,
                  "default": 20,
                  "description": "Maximum links to return when includeLinks is true."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 5000,
                  "description": "Fetch and extraction timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "fetched",
                "metadata",
                "text",
                "links",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "fetched": {
                  "type": "object",
                  "additionalProperties": true
                },
                "metadata": {
                  "type": "object",
                  "additionalProperties": true
                },
                "text": {
                  "type": "object",
                  "additionalProperties": true
                },
                "links": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/documents/any-to-markdown",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/documents/any-to-markdown",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "documents-content",
        "kind": "content-extraction-tool",
        "taxonomy": {
          "departmentId": "documents-content",
          "department": "Documents & Content",
          "aisleId": "extraction",
          "aisle": "Extraction",
          "shelfId": "url-to-markdown",
          "shelf": "Url To Markdown",
          "offeringId": "any-to-markdown",
          "offering": "Any URL to Markdown",
          "pathIds": [
            "documents-content",
            "extraction",
            "url-to-markdown",
            "any-to-markdown"
          ],
          "pathLabels": [
            "Documents & Content",
            "Extraction",
            "Url To Markdown",
            "Any URL to Markdown"
          ],
          "taxonomyPath": "documents-content.extraction.url-to-markdown.any-to-markdown",
          "layout": {
            "department": {
              "id": "documents-content",
              "name": "Documents & Content"
            },
            "aisle": {
              "id": "extraction",
              "name": "Extraction"
            },
            "shelf": {
              "id": "url-to-markdown",
              "name": "Url To Markdown"
            },
            "offering": {
              "id": "any-to-markdown",
              "name": "Any URL to Markdown"
            },
            "pathIds": [
              "documents-content",
              "extraction",
              "url-to-markdown",
              "any-to-markdown"
            ],
            "pathLabels": [
              "Documents & Content",
              "Extraction",
              "Url To Markdown",
              "Any URL to Markdown"
            ]
          }
        },
        "description": {
          "short": "Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.",
          "full": "Purpose: Convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nBest use: Use this when an agent needs convert one public URL into cleaned markdown with page metadata, normalized links, byte limits, truncation flags, and text statistics for RAG, notes, and agent content workflows.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeLinks, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- url (required, string): Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected. Constraints: format: uri.\n- includeLinks (optional, boolean): Set true to include normalized links that were visible in the source content. Constraints: default: true.\n- maxBytes (optional, integer): Maximum response body bytes to read before truncating the markdown extraction. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): Maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): Fetch and extraction timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeLinks\": true,\n  \"maxBytes\": 32768,\n  \"maxLinks\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "Set true to include normalized links that were visible in the source content."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read before truncating the markdown extraction."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "Maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch and extraction timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "Set true to include normalized links that were visible in the source content."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "Maximum response body bytes to read before truncating the markdown extraction."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "Maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "Fetch and extraction timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeLinks",
            "maxBytes",
            "maxLinks",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Public HTTP or HTTPS URL to convert into clean markdown. Local, private, and non-web schemes are rejected.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeLinks",
              "type": "boolean",
              "required": false,
              "description": "Set true to include normalized links that were visible in the source content.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "maxBytes",
              "type": "integer",
              "required": false,
              "description": "Maximum response body bytes to read before truncating the markdown extraction.",
              "constraints": {
                "default": 32768,
                "minimum": 1024,
                "maximum": 65536
              }
            },
            {
              "name": "maxLinks",
              "type": "integer",
              "required": false,
              "description": "Maximum links to return when includeLinks is true.",
              "constraints": {
                "default": 20,
                "minimum": 0,
                "maximum": 50
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "Fetch and extraction timeout in milliseconds.",
              "constraints": {
                "default": 5000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeLinks": true,
            "maxBytes": 32768,
            "maxLinks": 10
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeLinks": true,
          "maxBytes": 32768,
          "maxLinks": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "metadata",
            "text",
            "links",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "metadata": {
              "type": "object",
              "additionalProperties": true
            },
            "text": {
              "type": "object",
              "additionalProperties": true
            },
            "links": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "fetched",
            "metadata",
            "text",
            "links",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "fetched": {
              "type": "object",
              "additionalProperties": true
            },
            "metadata": {
              "type": "object",
              "additionalProperties": true
            },
            "text": {
              "type": "object",
              "additionalProperties": true
            },
            "links": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "any-to-markdown",
            "name": "Any URL to Markdown",
            "department": "Documents & Content"
          },
          "requested": {
            "url": "https://example.com",
            "includeLinks": true,
            "maxBytes": 32768,
            "maxLinks": 10
          },
          "fetched": {
            "finalUrl": "https://example.com/",
            "status": 200,
            "ok": true,
            "contentType": "text/html; charset=utf-8",
            "truncated": false
          },
          "metadata": {
            "title": "Example Domain",
            "description": "Example page for documentation.",
            "canonical": "https://example.com/"
          },
          "text": {
            "plain": "Example Domain\n\nThis domain is for use in illustrative examples.",
            "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples.",
            "characters": 65,
            "words": 10
          },
          "links": [
            {
              "href": "https://www.iana.org/domains/example",
              "text": "More information",
              "rel": ""
            }
          ],
          "limits": {
            "maxBytes": 32768,
            "maxLinks": 10,
            "timeoutMs": 5000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/documents/rag-prep",
      "type": "http",
      "x402Version": 2,
      "serviceName": "RAG Prep",
      "description": "Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.",
      "longDescription": "Purpose: Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nBest use: Use this when an agent needs prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: source.\nOptional fields: sourceType, chunkSizeChars, chunkOverlapChars, maxChunks, outputFormat, includeMarkdown, includeLinks, includeKeywords, includeEntities, artifactMode, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- source (required, string): Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text. Constraints: max length: 49152.\n- sourceType (optional, string): How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text. Constraints: accepted values: \"auto\", \"url\", \"text\"; default: \"auto\".\n- chunkSizeChars (optional, integer): Target maximum character count per chunk before overlap is applied. Constraints: default: 1200; min: 200; max: 3000.\n- chunkOverlapChars (optional, integer): Characters copied from the end of the previous chunk into the next chunk. Constraints: default: 120; min: 0; max: 1000.\n- maxChunks (optional, integer): Maximum number of chunks returned. Constraints: default: 50; min: 1; max: 100.\n- outputFormat (optional, string): Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact. Constraints: accepted values: \"json\", \"jsonl\", \"markdown\"; default: \"json\".\n- includeMarkdown (optional, boolean): For URL sources, include the extracted markdown when it fits the response caps. Constraints: default: true.\n- includeLinks (optional, boolean): For URL sources, include normalized links visible in the source content. Constraints: default: true.\n- includeKeywords (optional, boolean): Include lightweight frequency-based keyword hints. Constraints: default: true.\n- includeEntities (optional, boolean): Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference. Constraints: default: false.\n- artifactMode (optional, string): For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery. Constraints: accepted values: \"auto\", \"inline\", \"artifact\"; default: \"auto\".\n- maxBytes (optional, integer): For URL sources, maximum response body bytes to read before extraction is truncated. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): For URL sources, maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): For URL sources, fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"source\": \"https://example.com\",\n  \"sourceType\": \"url\",\n  \"chunkSizeChars\": 900,\n  \"chunkOverlapChars\": 100,\n  \"maxChunks\": 12,\n  \"outputFormat\": \"jsonl\",\n  \"includeLinks\": true,\n  \"includeKeywords\": true,\n  \"artifactMode\": \"auto\"\n}\n```",
      "category": "documents-content",
      "kind": "rag-prep-tool",
      "departmentId": "documents-content",
      "department": "Documents & Content",
      "aisleId": "rag-prep",
      "aisle": "RAG Prep",
      "shelfId": "chunking",
      "shelf": "Chunking",
      "offeringId": "rag-prep",
      "offering": "RAG Prep",
      "pathIds": [
        "documents-content",
        "rag-prep",
        "chunking",
        "rag-prep"
      ],
      "pathLabels": [
        "Documents & Content",
        "RAG Prep",
        "Chunking",
        "RAG Prep"
      ],
      "taxonomyPath": "documents-content.rag-prep.chunking.rag-prep",
      "layout": {
        "department": {
          "id": "documents-content",
          "name": "Documents & Content"
        },
        "aisle": {
          "id": "rag-prep",
          "name": "RAG Prep"
        },
        "shelf": {
          "id": "chunking",
          "name": "Chunking"
        },
        "offering": {
          "id": "rag-prep",
          "name": "RAG Prep"
        },
        "pathIds": [
          "documents-content",
          "rag-prep",
          "chunking",
          "rag-prep"
        ],
        "pathLabels": [
          "Documents & Content",
          "RAG Prep",
          "Chunking",
          "RAG Prep"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "documents-content",
        "rag-prep",
        "chunking",
        "jsonl",
        "markdown",
        "clean-text",
        "keywords",
        "retrieval",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "source"
        ],
        "properties": {
          "source": {
            "type": "string",
            "maxLength": 49152,
            "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text."
          },
          "sourceType": {
            "type": "string",
            "enum": [
              "auto",
              "url",
              "text"
            ],
            "default": "auto",
            "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text."
          },
          "chunkSizeChars": {
            "type": "integer",
            "minimum": 200,
            "maximum": 3000,
            "default": 1200,
            "description": "Target maximum character count per chunk before overlap is applied."
          },
          "chunkOverlapChars": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000,
            "default": 120,
            "description": "Characters copied from the end of the previous chunk into the next chunk."
          },
          "maxChunks": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 50,
            "description": "Maximum number of chunks returned."
          },
          "outputFormat": {
            "type": "string",
            "enum": [
              "json",
              "jsonl",
              "markdown"
            ],
            "default": "json",
            "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact."
          },
          "includeMarkdown": {
            "type": "boolean",
            "default": true,
            "description": "For URL sources, include the extracted markdown when it fits the response caps."
          },
          "includeLinks": {
            "type": "boolean",
            "default": true,
            "description": "For URL sources, include normalized links visible in the source content."
          },
          "includeKeywords": {
            "type": "boolean",
            "default": true,
            "description": "Include lightweight frequency-based keyword hints."
          },
          "includeEntities": {
            "type": "boolean",
            "default": false,
            "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference."
          },
          "artifactMode": {
            "type": "string",
            "enum": [
              "auto",
              "inline",
              "artifact"
            ],
            "default": "auto",
            "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery."
          },
          "maxBytes": {
            "type": "integer",
            "minimum": 1024,
            "maximum": 65536,
            "default": 32768,
            "description": "For URL sources, maximum response body bytes to read before extraction is truncated."
          },
          "maxLinks": {
            "type": "integer",
            "minimum": 0,
            "maximum": 50,
            "default": 20,
            "description": "For URL sources, maximum links to return when includeLinks is true."
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 10000,
            "default": 5000,
            "description": "For URL sources, fetch timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "source"
        ],
        "optional": [
          "sourceType",
          "chunkSizeChars",
          "chunkOverlapChars",
          "maxChunks",
          "outputFormat",
          "includeMarkdown",
          "includeLinks",
          "includeKeywords",
          "includeEntities",
          "artifactMode",
          "maxBytes",
          "maxLinks",
          "timeoutMs"
        ],
        "fields": [
          {
            "name": "source",
            "type": "string",
            "required": true,
            "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text.",
            "constraints": {
              "maxLength": 49152
            }
          },
          {
            "name": "sourceType",
            "type": "string",
            "required": false,
            "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text.",
            "constraints": {
              "enum": [
                "auto",
                "url",
                "text"
              ],
              "default": "auto"
            }
          },
          {
            "name": "chunkSizeChars",
            "type": "integer",
            "required": false,
            "description": "Target maximum character count per chunk before overlap is applied.",
            "constraints": {
              "default": 1200,
              "minimum": 200,
              "maximum": 3000
            }
          },
          {
            "name": "chunkOverlapChars",
            "type": "integer",
            "required": false,
            "description": "Characters copied from the end of the previous chunk into the next chunk.",
            "constraints": {
              "default": 120,
              "minimum": 0,
              "maximum": 1000
            }
          },
          {
            "name": "maxChunks",
            "type": "integer",
            "required": false,
            "description": "Maximum number of chunks returned.",
            "constraints": {
              "default": 50,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "outputFormat",
            "type": "string",
            "required": false,
            "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact.",
            "constraints": {
              "enum": [
                "json",
                "jsonl",
                "markdown"
              ],
              "default": "json"
            }
          },
          {
            "name": "includeMarkdown",
            "type": "boolean",
            "required": false,
            "description": "For URL sources, include the extracted markdown when it fits the response caps.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeLinks",
            "type": "boolean",
            "required": false,
            "description": "For URL sources, include normalized links visible in the source content.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeKeywords",
            "type": "boolean",
            "required": false,
            "description": "Include lightweight frequency-based keyword hints.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeEntities",
            "type": "boolean",
            "required": false,
            "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "artifactMode",
            "type": "string",
            "required": false,
            "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery.",
            "constraints": {
              "enum": [
                "auto",
                "inline",
                "artifact"
              ],
              "default": "auto"
            }
          },
          {
            "name": "maxBytes",
            "type": "integer",
            "required": false,
            "description": "For URL sources, maximum response body bytes to read before extraction is truncated.",
            "constraints": {
              "default": 32768,
              "minimum": 1024,
              "maximum": 65536
            }
          },
          {
            "name": "maxLinks",
            "type": "integer",
            "required": false,
            "description": "For URL sources, maximum links to return when includeLinks is true.",
            "constraints": {
              "default": 20,
              "minimum": 0,
              "maximum": 50
            }
          },
          {
            "name": "timeoutMs",
            "type": "integer",
            "required": false,
            "description": "For URL sources, fetch timeout in milliseconds.",
            "constraints": {
              "default": 5000,
              "minimum": 1000,
              "maximum": 10000
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "source": "https://example.com",
          "sourceType": "url",
          "chunkSizeChars": 900,
          "chunkOverlapChars": 100,
          "maxChunks": 12,
          "outputFormat": "jsonl",
          "includeLinks": true,
          "includeKeywords": true,
          "artifactMode": "auto"
        }
      },
      "exampleRequest": {
        "source": "https://example.com",
        "sourceType": "url",
        "chunkSizeChars": 900,
        "chunkOverlapChars": 100,
        "maxChunks": 12,
        "outputFormat": "jsonl",
        "includeLinks": true,
        "includeKeywords": true,
        "artifactMode": "auto"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "document",
          "chunks",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "document": {
            "type": "object",
            "additionalProperties": true
          },
          "chunks": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "entities": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "output": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "rag-prep",
          "name": "RAG Prep",
          "department": "Documents & Content"
        },
        "requested": {
          "sourceType": "url",
          "chunkSizeChars": 900,
          "chunkOverlapChars": 100,
          "maxChunks": 12,
          "outputFormat": "jsonl",
          "includeLinks": true,
          "includeKeywords": true
        },
        "source": {
          "type": "url",
          "url": "https://example.com",
          "finalUrl": "https://example.com/",
          "upstreamDetailsDisclosed": false
        },
        "fetched": {
          "status": 200,
          "ok": true,
          "contentType": "text/html; charset=utf-8",
          "bytesRead": 1256,
          "truncated": false
        },
        "metadata": {
          "title": "Example Domain",
          "description": "Example page for documentation.",
          "canonical": "https://example.com/"
        },
        "document": {
          "id": "doc_5b6a1f2e3d4c9a80",
          "hash": "5b6a1f2e3d4c9a80...",
          "sourceType": "url",
          "characters": 65,
          "words": 10,
          "estimatedTokens": 17,
          "chunkCount": 1
        },
        "chunks": [
          {
            "id": "5b6a1f2e3d4c-001",
            "index": 0,
            "hash": "2fb5c1d42a01e771",
            "text": "Example Domain\n\nThis domain is for use in illustrative examples.",
            "characters": 65,
            "words": 10,
            "estimatedTokens": 17,
            "overlapFromPreviousChars": 0
          }
        ],
        "keywords": [
          {
            "keyword": "domain",
            "count": 2
          }
        ],
        "output": {
          "format": "jsonl",
          "bytes": 180,
          "artifact": {
            "url": "https://agentbodega.store/a/signed-token",
            "method": "GET"
          }
        },
        "limits": {
          "maxSourceTextChars": 49152,
          "maxChunks": 100,
          "maxChunkSizeChars": 3000
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "source": "https://example.com",
                "sourceType": "url",
                "chunkSizeChars": 900,
                "chunkOverlapChars": 100,
                "maxChunks": 12,
                "outputFormat": "jsonl",
                "includeLinks": true,
                "includeKeywords": true,
                "artifactMode": "auto"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "rag-prep",
                  "name": "RAG Prep",
                  "department": "Documents & Content"
                },
                "requested": {
                  "sourceType": "url",
                  "chunkSizeChars": 900,
                  "chunkOverlapChars": 100,
                  "maxChunks": 12,
                  "outputFormat": "jsonl",
                  "includeLinks": true,
                  "includeKeywords": true
                },
                "source": {
                  "type": "url",
                  "url": "https://example.com",
                  "finalUrl": "https://example.com/",
                  "upstreamDetailsDisclosed": false
                },
                "fetched": {
                  "status": 200,
                  "ok": true,
                  "contentType": "text/html; charset=utf-8",
                  "bytesRead": 1256,
                  "truncated": false
                },
                "metadata": {
                  "title": "Example Domain",
                  "description": "Example page for documentation.",
                  "canonical": "https://example.com/"
                },
                "document": {
                  "id": "doc_5b6a1f2e3d4c9a80",
                  "hash": "5b6a1f2e3d4c9a80...",
                  "sourceType": "url",
                  "characters": 65,
                  "words": 10,
                  "estimatedTokens": 17,
                  "chunkCount": 1
                },
                "chunks": [
                  {
                    "id": "5b6a1f2e3d4c-001",
                    "index": 0,
                    "hash": "2fb5c1d42a01e771",
                    "text": "Example Domain\n\nThis domain is for use in illustrative examples.",
                    "characters": 65,
                    "words": 10,
                    "estimatedTokens": 17,
                    "overlapFromPreviousChars": 0
                  }
                ],
                "keywords": [
                  {
                    "keyword": "domain",
                    "count": 2
                  }
                ],
                "output": {
                  "format": "jsonl",
                  "bytes": 180,
                  "artifact": {
                    "url": "https://agentbodega.store/a/signed-token",
                    "method": "GET"
                  }
                },
                "limits": {
                  "maxSourceTextChars": 49152,
                  "maxChunks": 100,
                  "maxChunkSizeChars": 3000
                }
              }
            }
          },
          "routeTemplate": "/api/documents/rag-prep",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "source"
                    ],
                    "properties": {
                      "source": {
                        "type": "string",
                        "maxLength": 49152,
                        "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text."
                      },
                      "sourceType": {
                        "type": "string",
                        "enum": [
                          "auto",
                          "url",
                          "text"
                        ],
                        "default": "auto",
                        "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text."
                      },
                      "chunkSizeChars": {
                        "type": "integer",
                        "minimum": 200,
                        "maximum": 3000,
                        "default": 1200,
                        "description": "Target maximum character count per chunk before overlap is applied."
                      },
                      "chunkOverlapChars": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 1000,
                        "default": 120,
                        "description": "Characters copied from the end of the previous chunk into the next chunk."
                      },
                      "maxChunks": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100,
                        "default": 50,
                        "description": "Maximum number of chunks returned."
                      },
                      "outputFormat": {
                        "type": "string",
                        "enum": [
                          "json",
                          "jsonl",
                          "markdown"
                        ],
                        "default": "json",
                        "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact."
                      },
                      "includeMarkdown": {
                        "type": "boolean",
                        "default": true,
                        "description": "For URL sources, include the extracted markdown when it fits the response caps."
                      },
                      "includeLinks": {
                        "type": "boolean",
                        "default": true,
                        "description": "For URL sources, include normalized links visible in the source content."
                      },
                      "includeKeywords": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include lightweight frequency-based keyword hints."
                      },
                      "includeEntities": {
                        "type": "boolean",
                        "default": false,
                        "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference."
                      },
                      "artifactMode": {
                        "type": "string",
                        "enum": [
                          "auto",
                          "inline",
                          "artifact"
                        ],
                        "default": "auto",
                        "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery."
                      },
                      "maxBytes": {
                        "type": "integer",
                        "minimum": 1024,
                        "maximum": 65536,
                        "default": 32768,
                        "description": "For URL sources, maximum response body bytes to read before extraction is truncated."
                      },
                      "maxLinks": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 50,
                        "default": 20,
                        "description": "For URL sources, maximum links to return when includeLinks is true."
                      },
                      "timeoutMs": {
                        "type": "integer",
                        "minimum": 1000,
                        "maximum": 10000,
                        "default": 5000,
                        "description": "For URL sources, fetch timeout in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "document",
                      "chunks",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "document": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "chunks": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "keywords": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "entities": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "output": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "rag-prep",
            "url": "https://agentbodega.store/api/documents/rag-prep",
            "method": "POST",
            "description": "Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.",
            "longDescription": "Purpose: Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nBest use: Use this when an agent needs prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: source.\nOptional fields: sourceType, chunkSizeChars, chunkOverlapChars, maxChunks, outputFormat, includeMarkdown, includeLinks, includeKeywords, includeEntities, artifactMode, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- source (required, string): Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text. Constraints: max length: 49152.\n- sourceType (optional, string): How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text. Constraints: accepted values: \"auto\", \"url\", \"text\"; default: \"auto\".\n- chunkSizeChars (optional, integer): Target maximum character count per chunk before overlap is applied. Constraints: default: 1200; min: 200; max: 3000.\n- chunkOverlapChars (optional, integer): Characters copied from the end of the previous chunk into the next chunk. Constraints: default: 120; min: 0; max: 1000.\n- maxChunks (optional, integer): Maximum number of chunks returned. Constraints: default: 50; min: 1; max: 100.\n- outputFormat (optional, string): Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact. Constraints: accepted values: \"json\", \"jsonl\", \"markdown\"; default: \"json\".\n- includeMarkdown (optional, boolean): For URL sources, include the extracted markdown when it fits the response caps. Constraints: default: true.\n- includeLinks (optional, boolean): For URL sources, include normalized links visible in the source content. Constraints: default: true.\n- includeKeywords (optional, boolean): Include lightweight frequency-based keyword hints. Constraints: default: true.\n- includeEntities (optional, boolean): Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference. Constraints: default: false.\n- artifactMode (optional, string): For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery. Constraints: accepted values: \"auto\", \"inline\", \"artifact\"; default: \"auto\".\n- maxBytes (optional, integer): For URL sources, maximum response body bytes to read before extraction is truncated. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): For URL sources, maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): For URL sources, fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"source\": \"https://example.com\",\n  \"sourceType\": \"url\",\n  \"chunkSizeChars\": 900,\n  \"chunkOverlapChars\": 100,\n  \"maxChunks\": 12,\n  \"outputFormat\": \"jsonl\",\n  \"includeLinks\": true,\n  \"includeKeywords\": true,\n  \"artifactMode\": \"auto\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "RAG Prep",
            "category": "documents-content",
            "kind": "rag-prep-tool",
            "tags": [
              "documents-content",
              "rag-prep",
              "chunking",
              "jsonl",
              "markdown",
              "clean-text",
              "keywords",
              "retrieval",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "source"
              ],
              "optional": [
                "sourceType",
                "chunkSizeChars",
                "chunkOverlapChars",
                "maxChunks",
                "outputFormat",
                "includeMarkdown",
                "includeLinks",
                "includeKeywords",
                "includeEntities",
                "artifactMode",
                "maxBytes",
                "maxLinks",
                "timeoutMs"
              ],
              "fields": [
                {
                  "name": "source",
                  "type": "string",
                  "required": true,
                  "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text.",
                  "constraints": {
                    "maxLength": 49152
                  }
                },
                {
                  "name": "sourceType",
                  "type": "string",
                  "required": false,
                  "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text.",
                  "constraints": {
                    "enum": [
                      "auto",
                      "url",
                      "text"
                    ],
                    "default": "auto"
                  }
                },
                {
                  "name": "chunkSizeChars",
                  "type": "integer",
                  "required": false,
                  "description": "Target maximum character count per chunk before overlap is applied.",
                  "constraints": {
                    "default": 1200,
                    "minimum": 200,
                    "maximum": 3000
                  }
                },
                {
                  "name": "chunkOverlapChars",
                  "type": "integer",
                  "required": false,
                  "description": "Characters copied from the end of the previous chunk into the next chunk.",
                  "constraints": {
                    "default": 120,
                    "minimum": 0,
                    "maximum": 1000
                  }
                },
                {
                  "name": "maxChunks",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum number of chunks returned.",
                  "constraints": {
                    "default": 50,
                    "minimum": 1,
                    "maximum": 100
                  }
                },
                {
                  "name": "outputFormat",
                  "type": "string",
                  "required": false,
                  "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact.",
                  "constraints": {
                    "enum": [
                      "json",
                      "jsonl",
                      "markdown"
                    ],
                    "default": "json"
                  }
                },
                {
                  "name": "includeMarkdown",
                  "type": "boolean",
                  "required": false,
                  "description": "For URL sources, include the extracted markdown when it fits the response caps.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeLinks",
                  "type": "boolean",
                  "required": false,
                  "description": "For URL sources, include normalized links visible in the source content.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeKeywords",
                  "type": "boolean",
                  "required": false,
                  "description": "Include lightweight frequency-based keyword hints.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeEntities",
                  "type": "boolean",
                  "required": false,
                  "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "artifactMode",
                  "type": "string",
                  "required": false,
                  "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery.",
                  "constraints": {
                    "enum": [
                      "auto",
                      "inline",
                      "artifact"
                    ],
                    "default": "auto"
                  }
                },
                {
                  "name": "maxBytes",
                  "type": "integer",
                  "required": false,
                  "description": "For URL sources, maximum response body bytes to read before extraction is truncated.",
                  "constraints": {
                    "default": 32768,
                    "minimum": 1024,
                    "maximum": 65536
                  }
                },
                {
                  "name": "maxLinks",
                  "type": "integer",
                  "required": false,
                  "description": "For URL sources, maximum links to return when includeLinks is true.",
                  "constraints": {
                    "default": 20,
                    "minimum": 0,
                    "maximum": 50
                  }
                },
                {
                  "name": "timeoutMs",
                  "type": "integer",
                  "required": false,
                  "description": "For URL sources, fetch timeout in milliseconds.",
                  "constraints": {
                    "default": 5000,
                    "minimum": 1000,
                    "maximum": 10000
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "source": "https://example.com",
                "sourceType": "url",
                "chunkSizeChars": 900,
                "chunkOverlapChars": 100,
                "maxChunks": 12,
                "outputFormat": "jsonl",
                "includeLinks": true,
                "includeKeywords": true,
                "artifactMode": "auto"
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "source"
              ],
              "properties": {
                "source": {
                  "type": "string",
                  "maxLength": 49152,
                  "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text."
                },
                "sourceType": {
                  "type": "string",
                  "enum": [
                    "auto",
                    "url",
                    "text"
                  ],
                  "default": "auto",
                  "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text."
                },
                "chunkSizeChars": {
                  "type": "integer",
                  "minimum": 200,
                  "maximum": 3000,
                  "default": 1200,
                  "description": "Target maximum character count per chunk before overlap is applied."
                },
                "chunkOverlapChars": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1000,
                  "default": 120,
                  "description": "Characters copied from the end of the previous chunk into the next chunk."
                },
                "maxChunks": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100,
                  "default": 50,
                  "description": "Maximum number of chunks returned."
                },
                "outputFormat": {
                  "type": "string",
                  "enum": [
                    "json",
                    "jsonl",
                    "markdown"
                  ],
                  "default": "json",
                  "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact."
                },
                "includeMarkdown": {
                  "type": "boolean",
                  "default": true,
                  "description": "For URL sources, include the extracted markdown when it fits the response caps."
                },
                "includeLinks": {
                  "type": "boolean",
                  "default": true,
                  "description": "For URL sources, include normalized links visible in the source content."
                },
                "includeKeywords": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include lightweight frequency-based keyword hints."
                },
                "includeEntities": {
                  "type": "boolean",
                  "default": false,
                  "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference."
                },
                "artifactMode": {
                  "type": "string",
                  "enum": [
                    "auto",
                    "inline",
                    "artifact"
                  ],
                  "default": "auto",
                  "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery."
                },
                "maxBytes": {
                  "type": "integer",
                  "minimum": 1024,
                  "maximum": 65536,
                  "default": 32768,
                  "description": "For URL sources, maximum response body bytes to read before extraction is truncated."
                },
                "maxLinks": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 50,
                  "default": 20,
                  "description": "For URL sources, maximum links to return when includeLinks is true."
                },
                "timeoutMs": {
                  "type": "integer",
                  "minimum": 1000,
                  "maximum": 10000,
                  "default": 5000,
                  "description": "For URL sources, fetch timeout in milliseconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "document",
                "chunks",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "document": {
                  "type": "object",
                  "additionalProperties": true
                },
                "chunks": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "keywords": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "entities": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "output": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/documents/rag-prep",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/documents/rag-prep",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "documents-content",
        "kind": "rag-prep-tool",
        "taxonomy": {
          "departmentId": "documents-content",
          "department": "Documents & Content",
          "aisleId": "rag-prep",
          "aisle": "RAG Prep",
          "shelfId": "chunking",
          "shelf": "Chunking",
          "offeringId": "rag-prep",
          "offering": "RAG Prep",
          "pathIds": [
            "documents-content",
            "rag-prep",
            "chunking",
            "rag-prep"
          ],
          "pathLabels": [
            "Documents & Content",
            "RAG Prep",
            "Chunking",
            "RAG Prep"
          ],
          "taxonomyPath": "documents-content.rag-prep.chunking.rag-prep",
          "layout": {
            "department": {
              "id": "documents-content",
              "name": "Documents & Content"
            },
            "aisle": {
              "id": "rag-prep",
              "name": "RAG Prep"
            },
            "shelf": {
              "id": "chunking",
              "name": "Chunking"
            },
            "offering": {
              "id": "rag-prep",
              "name": "RAG Prep"
            },
            "pathIds": [
              "documents-content",
              "rag-prep",
              "chunking",
              "rag-prep"
            ],
            "pathLabels": [
              "Documents & Content",
              "RAG Prep",
              "Chunking",
              "RAG Prep"
            ]
          }
        },
        "description": {
          "short": "Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.",
          "full": "Purpose: Prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nBest use: Use this when an agent needs prepare one public URL or raw text payload for retrieval workflows with cleaned text, stable chunk IDs, overlap-aware chunks, token estimates, keyword hints, optional entity hints, JSONL or markdown formatting, and strict size caps.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: source.\nOptional fields: sourceType, chunkSizeChars, chunkOverlapChars, maxChunks, outputFormat, includeMarkdown, includeLinks, includeKeywords, includeEntities, artifactMode, maxBytes, maxLinks, timeoutMs.\n\nAccepted fields:\n- source (required, string): Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text. Constraints: max length: 49152.\n- sourceType (optional, string): How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text. Constraints: accepted values: \"auto\", \"url\", \"text\"; default: \"auto\".\n- chunkSizeChars (optional, integer): Target maximum character count per chunk before overlap is applied. Constraints: default: 1200; min: 200; max: 3000.\n- chunkOverlapChars (optional, integer): Characters copied from the end of the previous chunk into the next chunk. Constraints: default: 120; min: 0; max: 1000.\n- maxChunks (optional, integer): Maximum number of chunks returned. Constraints: default: 50; min: 1; max: 100.\n- outputFormat (optional, string): Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact. Constraints: accepted values: \"json\", \"jsonl\", \"markdown\"; default: \"json\".\n- includeMarkdown (optional, boolean): For URL sources, include the extracted markdown when it fits the response caps. Constraints: default: true.\n- includeLinks (optional, boolean): For URL sources, include normalized links visible in the source content. Constraints: default: true.\n- includeKeywords (optional, boolean): Include lightweight frequency-based keyword hints. Constraints: default: true.\n- includeEntities (optional, boolean): Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference. Constraints: default: false.\n- artifactMode (optional, string): For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery. Constraints: accepted values: \"auto\", \"inline\", \"artifact\"; default: \"auto\".\n- maxBytes (optional, integer): For URL sources, maximum response body bytes to read before extraction is truncated. Constraints: default: 32768; min: 1024; max: 65536.\n- maxLinks (optional, integer): For URL sources, maximum links to return when includeLinks is true. Constraints: default: 20; min: 0; max: 50.\n- timeoutMs (optional, integer): For URL sources, fetch timeout in milliseconds. Constraints: default: 5000; min: 1000; max: 10000.\n\nExample request body:\n```json\n{\n  \"source\": \"https://example.com\",\n  \"sourceType\": \"url\",\n  \"chunkSizeChars\": 900,\n  \"chunkOverlapChars\": 100,\n  \"maxChunks\": 12,\n  \"outputFormat\": \"jsonl\",\n  \"includeLinks\": true,\n  \"includeKeywords\": true,\n  \"artifactMode\": \"auto\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "source"
          ],
          "properties": {
            "source": {
              "type": "string",
              "maxLength": 49152,
              "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text."
            },
            "sourceType": {
              "type": "string",
              "enum": [
                "auto",
                "url",
                "text"
              ],
              "default": "auto",
              "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text."
            },
            "chunkSizeChars": {
              "type": "integer",
              "minimum": 200,
              "maximum": 3000,
              "default": 1200,
              "description": "Target maximum character count per chunk before overlap is applied."
            },
            "chunkOverlapChars": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000,
              "default": 120,
              "description": "Characters copied from the end of the previous chunk into the next chunk."
            },
            "maxChunks": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50,
              "description": "Maximum number of chunks returned."
            },
            "outputFormat": {
              "type": "string",
              "enum": [
                "json",
                "jsonl",
                "markdown"
              ],
              "default": "json",
              "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "For URL sources, include the extracted markdown when it fits the response caps."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "For URL sources, include normalized links visible in the source content."
            },
            "includeKeywords": {
              "type": "boolean",
              "default": true,
              "description": "Include lightweight frequency-based keyword hints."
            },
            "includeEntities": {
              "type": "boolean",
              "default": false,
              "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference."
            },
            "artifactMode": {
              "type": "string",
              "enum": [
                "auto",
                "inline",
                "artifact"
              ],
              "default": "auto",
              "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "For URL sources, maximum response body bytes to read before extraction is truncated."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "For URL sources, maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "For URL sources, fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "source"
          ],
          "properties": {
            "source": {
              "type": "string",
              "maxLength": 49152,
              "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text."
            },
            "sourceType": {
              "type": "string",
              "enum": [
                "auto",
                "url",
                "text"
              ],
              "default": "auto",
              "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text."
            },
            "chunkSizeChars": {
              "type": "integer",
              "minimum": 200,
              "maximum": 3000,
              "default": 1200,
              "description": "Target maximum character count per chunk before overlap is applied."
            },
            "chunkOverlapChars": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000,
              "default": 120,
              "description": "Characters copied from the end of the previous chunk into the next chunk."
            },
            "maxChunks": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50,
              "description": "Maximum number of chunks returned."
            },
            "outputFormat": {
              "type": "string",
              "enum": [
                "json",
                "jsonl",
                "markdown"
              ],
              "default": "json",
              "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "For URL sources, include the extracted markdown when it fits the response caps."
            },
            "includeLinks": {
              "type": "boolean",
              "default": true,
              "description": "For URL sources, include normalized links visible in the source content."
            },
            "includeKeywords": {
              "type": "boolean",
              "default": true,
              "description": "Include lightweight frequency-based keyword hints."
            },
            "includeEntities": {
              "type": "boolean",
              "default": false,
              "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference."
            },
            "artifactMode": {
              "type": "string",
              "enum": [
                "auto",
                "inline",
                "artifact"
              ],
              "default": "auto",
              "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery."
            },
            "maxBytes": {
              "type": "integer",
              "minimum": 1024,
              "maximum": 65536,
              "default": 32768,
              "description": "For URL sources, maximum response body bytes to read before extraction is truncated."
            },
            "maxLinks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 20,
              "description": "For URL sources, maximum links to return when includeLinks is true."
            },
            "timeoutMs": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 10000,
              "default": 5000,
              "description": "For URL sources, fetch timeout in milliseconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "source"
          ],
          "optional": [
            "sourceType",
            "chunkSizeChars",
            "chunkOverlapChars",
            "maxChunks",
            "outputFormat",
            "includeMarkdown",
            "includeLinks",
            "includeKeywords",
            "includeEntities",
            "artifactMode",
            "maxBytes",
            "maxLinks",
            "timeoutMs"
          ],
          "fields": [
            {
              "name": "source",
              "type": "string",
              "required": true,
              "description": "Required source to prepare for RAG. Pass a public HTTP/HTTPS URL when sourceType is url, or raw text when sourceType is text.",
              "constraints": {
                "maxLength": 49152
              }
            },
            {
              "name": "sourceType",
              "type": "string",
              "required": false,
              "description": "How to interpret source. auto treats HTTP/HTTPS strings as URLs and everything else as raw text.",
              "constraints": {
                "enum": [
                  "auto",
                  "url",
                  "text"
                ],
                "default": "auto"
              }
            },
            {
              "name": "chunkSizeChars",
              "type": "integer",
              "required": false,
              "description": "Target maximum character count per chunk before overlap is applied.",
              "constraints": {
                "default": 1200,
                "minimum": 200,
                "maximum": 3000
              }
            },
            {
              "name": "chunkOverlapChars",
              "type": "integer",
              "required": false,
              "description": "Characters copied from the end of the previous chunk into the next chunk.",
              "constraints": {
                "default": 120,
                "minimum": 0,
                "maximum": 1000
              }
            },
            {
              "name": "maxChunks",
              "type": "integer",
              "required": false,
              "description": "Maximum number of chunks returned.",
              "constraints": {
                "default": 50,
                "minimum": 1,
                "maximum": 100
              }
            },
            {
              "name": "outputFormat",
              "type": "string",
              "required": false,
              "description": "Response format helper. json returns structured chunks; jsonl and markdown also include a formatted output string or artifact.",
              "constraints": {
                "enum": [
                  "json",
                  "jsonl",
                  "markdown"
                ],
                "default": "json"
              }
            },
            {
              "name": "includeMarkdown",
              "type": "boolean",
              "required": false,
              "description": "For URL sources, include the extracted markdown when it fits the response caps.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeLinks",
              "type": "boolean",
              "required": false,
              "description": "For URL sources, include normalized links visible in the source content.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeKeywords",
              "type": "boolean",
              "required": false,
              "description": "Include lightweight frequency-based keyword hints.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeEntities",
              "type": "boolean",
              "required": false,
              "description": "Include simple capitalized-phrase entity hints. This is deterministic extraction, not LLM inference.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "artifactMode",
              "type": "string",
              "required": false,
              "description": "For jsonl or markdown output, auto creates a short-lived signed artifact when the formatted output is small enough for stateless artifact delivery.",
              "constraints": {
                "enum": [
                  "auto",
                  "inline",
                  "artifact"
                ],
                "default": "auto"
              }
            },
            {
              "name": "maxBytes",
              "type": "integer",
              "required": false,
              "description": "For URL sources, maximum response body bytes to read before extraction is truncated.",
              "constraints": {
                "default": 32768,
                "minimum": 1024,
                "maximum": 65536
              }
            },
            {
              "name": "maxLinks",
              "type": "integer",
              "required": false,
              "description": "For URL sources, maximum links to return when includeLinks is true.",
              "constraints": {
                "default": 20,
                "minimum": 0,
                "maximum": 50
              }
            },
            {
              "name": "timeoutMs",
              "type": "integer",
              "required": false,
              "description": "For URL sources, fetch timeout in milliseconds.",
              "constraints": {
                "default": 5000,
                "minimum": 1000,
                "maximum": 10000
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "source": "https://example.com",
            "sourceType": "url",
            "chunkSizeChars": 900,
            "chunkOverlapChars": 100,
            "maxChunks": 12,
            "outputFormat": "jsonl",
            "includeLinks": true,
            "includeKeywords": true,
            "artifactMode": "auto"
          }
        },
        "exampleRequest": {
          "source": "https://example.com",
          "sourceType": "url",
          "chunkSizeChars": 900,
          "chunkOverlapChars": 100,
          "maxChunks": 12,
          "outputFormat": "jsonl",
          "includeLinks": true,
          "includeKeywords": true,
          "artifactMode": "auto"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "document",
            "chunks",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "document": {
              "type": "object",
              "additionalProperties": true
            },
            "chunks": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "keywords": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "entities": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "output": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "document",
            "chunks",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "document": {
              "type": "object",
              "additionalProperties": true
            },
            "chunks": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "keywords": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "entities": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "output": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "rag-prep",
            "name": "RAG Prep",
            "department": "Documents & Content"
          },
          "requested": {
            "sourceType": "url",
            "chunkSizeChars": 900,
            "chunkOverlapChars": 100,
            "maxChunks": 12,
            "outputFormat": "jsonl",
            "includeLinks": true,
            "includeKeywords": true
          },
          "source": {
            "type": "url",
            "url": "https://example.com",
            "finalUrl": "https://example.com/",
            "upstreamDetailsDisclosed": false
          },
          "fetched": {
            "status": 200,
            "ok": true,
            "contentType": "text/html; charset=utf-8",
            "bytesRead": 1256,
            "truncated": false
          },
          "metadata": {
            "title": "Example Domain",
            "description": "Example page for documentation.",
            "canonical": "https://example.com/"
          },
          "document": {
            "id": "doc_5b6a1f2e3d4c9a80",
            "hash": "5b6a1f2e3d4c9a80...",
            "sourceType": "url",
            "characters": 65,
            "words": 10,
            "estimatedTokens": 17,
            "chunkCount": 1
          },
          "chunks": [
            {
              "id": "5b6a1f2e3d4c-001",
              "index": 0,
              "hash": "2fb5c1d42a01e771",
              "text": "Example Domain\n\nThis domain is for use in illustrative examples.",
              "characters": 65,
              "words": 10,
              "estimatedTokens": 17,
              "overlapFromPreviousChars": 0
            }
          ],
          "keywords": [
            {
              "keyword": "domain",
              "count": 2
            }
          ],
          "output": {
            "format": "jsonl",
            "bytes": 180,
            "artifact": {
              "url": "https://agentbodega.store/a/signed-token",
              "method": "GET"
            }
          },
          "limits": {
            "maxSourceTextChars": 49152,
            "maxChunks": 100,
            "maxChunkSizeChars": 3000
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/media/image/convert",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Image Format Converter",
      "description": "Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.",
      "longDescription": "Purpose: Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nBest use: Use this when an agent needs create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: imageUrl, targetFormat.\nOptional fields: width, height, fit, quality, background, filename, ttlSeconds.\n\nAccepted fields:\n- imageUrl (required, string): Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected. Constraints: format: uri.\n- targetFormat (required, string): Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend. Constraints: accepted values: \"jpg\", \"jpeg\", \"png\", \"webp\", \"avif\".\n- width (optional, integer): Optional output width in pixels. If omitted, the source width is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- height (optional, integer): Optional output height in pixels. If omitted, the source height is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- fit (optional, string): Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds. Constraints: accepted values: \"scale-down\", \"contain\", \"cover\", \"crop\", \"pad\"; default: \"scale-down\".\n- quality (optional, integer): Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded. Constraints: default: 85; min: 1; max: 95.\n- background (optional, string): Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff. Constraints: max length: 40.\n- filename (optional, string): Optional download filename. The service normalizes the extension to match targetFormat. Constraints: max length: 120.\n- ttlSeconds (optional, integer): How long the signed conversion download URL should remain usable, in seconds. Constraints: default: 3600; min: 60; max: 86400.\n\nExample request body:\n```json\n{\n  \"imageUrl\": \"https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg\",\n  \"targetFormat\": \"webp\",\n  \"width\": 800,\n  \"fit\": \"scale-down\",\n  \"quality\": 85,\n  \"ttlSeconds\": 3600\n}\n```",
      "category": "edge-ai-automation",
      "kind": "media-conversion-tool",
      "departmentId": "edge-ai-automation",
      "department": "Edge AI & Automation",
      "aisleId": "media-conversion",
      "aisle": "Media Conversion",
      "shelfId": "image-format",
      "shelf": "Image Format",
      "offeringId": "image-format-converter",
      "offering": "Image Format Converter",
      "pathIds": [
        "edge-ai-automation",
        "media-conversion",
        "image-format",
        "image-format-converter"
      ],
      "pathLabels": [
        "Edge AI & Automation",
        "Media Conversion",
        "Image Format",
        "Image Format Converter"
      ],
      "taxonomyPath": "edge-ai-automation.media-conversion.image-format.image-format-converter",
      "layout": {
        "department": {
          "id": "edge-ai-automation",
          "name": "Edge AI & Automation"
        },
        "aisle": {
          "id": "media-conversion",
          "name": "Media Conversion"
        },
        "shelf": {
          "id": "image-format",
          "name": "Image Format"
        },
        "offering": {
          "id": "image-format-converter",
          "name": "Image Format Converter"
        },
        "pathIds": [
          "edge-ai-automation",
          "media-conversion",
          "image-format",
          "image-format-converter"
        ],
        "pathLabels": [
          "Edge AI & Automation",
          "Media Conversion",
          "Image Format",
          "Image Format Converter"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "edge-ai-automation",
        "media",
        "image",
        "image-conversion",
        "heic",
        "jpg",
        "jpeg",
        "png",
        "webp",
        "avif",
        "agent-tools",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "imageUrl",
          "targetFormat"
        ],
        "properties": {
          "imageUrl": {
            "type": "string",
            "format": "uri",
            "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected."
          },
          "targetFormat": {
            "type": "string",
            "enum": [
              "jpg",
              "jpeg",
              "png",
              "webp",
              "avif"
            ],
            "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend."
          },
          "width": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4096,
            "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it."
          },
          "height": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4096,
            "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it."
          },
          "fit": {
            "type": "string",
            "enum": [
              "scale-down",
              "contain",
              "cover",
              "crop",
              "pad"
            ],
            "default": "scale-down",
            "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds."
          },
          "quality": {
            "type": "integer",
            "minimum": 1,
            "maximum": 95,
            "default": 85,
            "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded."
          },
          "background": {
            "type": "string",
            "maxLength": 40,
            "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff."
          },
          "filename": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional download filename. The service normalizes the extension to match targetFormat."
          },
          "ttlSeconds": {
            "type": "integer",
            "minimum": 60,
            "maximum": 86400,
            "default": 3600,
            "description": "How long the signed conversion download URL should remain usable, in seconds."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "imageUrl",
          "targetFormat"
        ],
        "optional": [
          "width",
          "height",
          "fit",
          "quality",
          "background",
          "filename",
          "ttlSeconds"
        ],
        "fields": [
          {
            "name": "imageUrl",
            "type": "string",
            "required": true,
            "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "targetFormat",
            "type": "string",
            "required": true,
            "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend.",
            "constraints": {
              "enum": [
                "jpg",
                "jpeg",
                "png",
                "webp",
                "avif"
              ]
            }
          },
          {
            "name": "width",
            "type": "integer",
            "required": false,
            "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it.",
            "constraints": {
              "minimum": 1,
              "maximum": 4096
            }
          },
          {
            "name": "height",
            "type": "integer",
            "required": false,
            "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it.",
            "constraints": {
              "minimum": 1,
              "maximum": 4096
            }
          },
          {
            "name": "fit",
            "type": "string",
            "required": false,
            "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds.",
            "constraints": {
              "enum": [
                "scale-down",
                "contain",
                "cover",
                "crop",
                "pad"
              ],
              "default": "scale-down"
            }
          },
          {
            "name": "quality",
            "type": "integer",
            "required": false,
            "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded.",
            "constraints": {
              "default": 85,
              "minimum": 1,
              "maximum": 95
            }
          },
          {
            "name": "background",
            "type": "string",
            "required": false,
            "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff.",
            "constraints": {
              "maxLength": 40
            }
          },
          {
            "name": "filename",
            "type": "string",
            "required": false,
            "description": "Optional download filename. The service normalizes the extension to match targetFormat.",
            "constraints": {
              "maxLength": 120
            }
          },
          {
            "name": "ttlSeconds",
            "type": "integer",
            "required": false,
            "description": "How long the signed conversion download URL should remain usable, in seconds.",
            "constraints": {
              "default": 3600,
              "minimum": 60,
              "maximum": 86400
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
          "targetFormat": "webp",
          "width": 800,
          "fit": "scale-down",
          "quality": 85,
          "ttlSeconds": 3600
        }
      },
      "exampleRequest": {
        "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
        "targetFormat": "webp",
        "width": 800,
        "fit": "scale-down",
        "quality": 85,
        "ttlSeconds": 3600
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "conversion",
          "download",
          "limits"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "conversion": {
            "type": "object",
            "additionalProperties": true
          },
          "download": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "image-format-converter",
          "name": "Image Format Converter",
          "department": "Edge AI & Automation"
        },
        "requested": {
          "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
          "targetFormat": "webp",
          "width": 800,
          "fit": "scale-down",
          "quality": 85,
          "ttlSeconds": 3600
        },
        "source": {
          "contentType": "image/jpeg",
          "contentLength": 36287,
          "extension": "jpg",
          "validated": true,
          "redirectsAllowed": false
        },
        "conversion": {
          "targetFormat": "webp",
          "contentType": "image/webp",
          "filename": "JPEG_example_flower.webp"
        },
        "download": {
          "url": "https://agentbodega.store/i/signed-token",
          "method": "GET",
          "expiresAt": "2026-07-07T18:00:00.000Z"
        },
        "limits": {
          "maxSourceBytes": 10485760,
          "maxDimension": 4096,
          "maxQuality": 95,
          "maxTtlSeconds": 86400
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
                "targetFormat": "webp",
                "width": 800,
                "fit": "scale-down",
                "quality": 85,
                "ttlSeconds": 3600
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "image-format-converter",
                  "name": "Image Format Converter",
                  "department": "Edge AI & Automation"
                },
                "requested": {
                  "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
                  "targetFormat": "webp",
                  "width": 800,
                  "fit": "scale-down",
                  "quality": 85,
                  "ttlSeconds": 3600
                },
                "source": {
                  "contentType": "image/jpeg",
                  "contentLength": 36287,
                  "extension": "jpg",
                  "validated": true,
                  "redirectsAllowed": false
                },
                "conversion": {
                  "targetFormat": "webp",
                  "contentType": "image/webp",
                  "filename": "JPEG_example_flower.webp"
                },
                "download": {
                  "url": "https://agentbodega.store/i/signed-token",
                  "method": "GET",
                  "expiresAt": "2026-07-07T18:00:00.000Z"
                },
                "limits": {
                  "maxSourceBytes": 10485760,
                  "maxDimension": 4096,
                  "maxQuality": 95,
                  "maxTtlSeconds": 86400
                }
              }
            }
          },
          "routeTemplate": "/api/media/image/convert",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "imageUrl",
                      "targetFormat"
                    ],
                    "properties": {
                      "imageUrl": {
                        "type": "string",
                        "format": "uri",
                        "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected."
                      },
                      "targetFormat": {
                        "type": "string",
                        "enum": [
                          "jpg",
                          "jpeg",
                          "png",
                          "webp",
                          "avif"
                        ],
                        "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend."
                      },
                      "width": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 4096,
                        "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it."
                      },
                      "height": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 4096,
                        "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it."
                      },
                      "fit": {
                        "type": "string",
                        "enum": [
                          "scale-down",
                          "contain",
                          "cover",
                          "crop",
                          "pad"
                        ],
                        "default": "scale-down",
                        "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds."
                      },
                      "quality": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 95,
                        "default": 85,
                        "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded."
                      },
                      "background": {
                        "type": "string",
                        "maxLength": 40,
                        "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff."
                      },
                      "filename": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional download filename. The service normalizes the extension to match targetFormat."
                      },
                      "ttlSeconds": {
                        "type": "integer",
                        "minimum": 60,
                        "maximum": 86400,
                        "default": 3600,
                        "description": "How long the signed conversion download URL should remain usable, in seconds."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "conversion",
                      "download",
                      "limits"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "conversion": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "download": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "image-format-converter",
            "url": "https://agentbodega.store/api/media/image/convert",
            "method": "POST",
            "description": "Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.",
            "longDescription": "Purpose: Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nBest use: Use this when an agent needs create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: imageUrl, targetFormat.\nOptional fields: width, height, fit, quality, background, filename, ttlSeconds.\n\nAccepted fields:\n- imageUrl (required, string): Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected. Constraints: format: uri.\n- targetFormat (required, string): Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend. Constraints: accepted values: \"jpg\", \"jpeg\", \"png\", \"webp\", \"avif\".\n- width (optional, integer): Optional output width in pixels. If omitted, the source width is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- height (optional, integer): Optional output height in pixels. If omitted, the source height is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- fit (optional, string): Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds. Constraints: accepted values: \"scale-down\", \"contain\", \"cover\", \"crop\", \"pad\"; default: \"scale-down\".\n- quality (optional, integer): Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded. Constraints: default: 85; min: 1; max: 95.\n- background (optional, string): Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff. Constraints: max length: 40.\n- filename (optional, string): Optional download filename. The service normalizes the extension to match targetFormat. Constraints: max length: 120.\n- ttlSeconds (optional, integer): How long the signed conversion download URL should remain usable, in seconds. Constraints: default: 3600; min: 60; max: 86400.\n\nExample request body:\n```json\n{\n  \"imageUrl\": \"https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg\",\n  \"targetFormat\": \"webp\",\n  \"width\": 800,\n  \"fit\": \"scale-down\",\n  \"quality\": 85,\n  \"ttlSeconds\": 3600\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Image Format Converter",
            "category": "edge-ai-automation",
            "kind": "media-conversion-tool",
            "tags": [
              "edge-ai-automation",
              "media",
              "image",
              "image-conversion",
              "heic",
              "jpg",
              "jpeg",
              "png",
              "webp",
              "avif",
              "agent-tools",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "imageUrl",
                "targetFormat"
              ],
              "optional": [
                "width",
                "height",
                "fit",
                "quality",
                "background",
                "filename",
                "ttlSeconds"
              ],
              "fields": [
                {
                  "name": "imageUrl",
                  "type": "string",
                  "required": true,
                  "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "targetFormat",
                  "type": "string",
                  "required": true,
                  "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend.",
                  "constraints": {
                    "enum": [
                      "jpg",
                      "jpeg",
                      "png",
                      "webp",
                      "avif"
                    ]
                  }
                },
                {
                  "name": "width",
                  "type": "integer",
                  "required": false,
                  "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it.",
                  "constraints": {
                    "minimum": 1,
                    "maximum": 4096
                  }
                },
                {
                  "name": "height",
                  "type": "integer",
                  "required": false,
                  "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it.",
                  "constraints": {
                    "minimum": 1,
                    "maximum": 4096
                  }
                },
                {
                  "name": "fit",
                  "type": "string",
                  "required": false,
                  "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds.",
                  "constraints": {
                    "enum": [
                      "scale-down",
                      "contain",
                      "cover",
                      "crop",
                      "pad"
                    ],
                    "default": "scale-down"
                  }
                },
                {
                  "name": "quality",
                  "type": "integer",
                  "required": false,
                  "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded.",
                  "constraints": {
                    "default": 85,
                    "minimum": 1,
                    "maximum": 95
                  }
                },
                {
                  "name": "background",
                  "type": "string",
                  "required": false,
                  "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff.",
                  "constraints": {
                    "maxLength": 40
                  }
                },
                {
                  "name": "filename",
                  "type": "string",
                  "required": false,
                  "description": "Optional download filename. The service normalizes the extension to match targetFormat.",
                  "constraints": {
                    "maxLength": 120
                  }
                },
                {
                  "name": "ttlSeconds",
                  "type": "integer",
                  "required": false,
                  "description": "How long the signed conversion download URL should remain usable, in seconds.",
                  "constraints": {
                    "default": 3600,
                    "minimum": 60,
                    "maximum": 86400
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
                "targetFormat": "webp",
                "width": 800,
                "fit": "scale-down",
                "quality": 85,
                "ttlSeconds": 3600
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "imageUrl",
                "targetFormat"
              ],
              "properties": {
                "imageUrl": {
                  "type": "string",
                  "format": "uri",
                  "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected."
                },
                "targetFormat": {
                  "type": "string",
                  "enum": [
                    "jpg",
                    "jpeg",
                    "png",
                    "webp",
                    "avif"
                  ],
                  "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend."
                },
                "width": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 4096,
                  "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it."
                },
                "height": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 4096,
                  "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it."
                },
                "fit": {
                  "type": "string",
                  "enum": [
                    "scale-down",
                    "contain",
                    "cover",
                    "crop",
                    "pad"
                  ],
                  "default": "scale-down",
                  "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds."
                },
                "quality": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 95,
                  "default": 85,
                  "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded."
                },
                "background": {
                  "type": "string",
                  "maxLength": 40,
                  "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff."
                },
                "filename": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional download filename. The service normalizes the extension to match targetFormat."
                },
                "ttlSeconds": {
                  "type": "integer",
                  "minimum": 60,
                  "maximum": 86400,
                  "default": 3600,
                  "description": "How long the signed conversion download URL should remain usable, in seconds."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "conversion",
                "download",
                "limits"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "conversion": {
                  "type": "object",
                  "additionalProperties": true
                },
                "download": {
                  "type": "object",
                  "additionalProperties": true
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/media/image/convert",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/media/image/convert",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "edge-ai-automation",
        "kind": "media-conversion-tool",
        "taxonomy": {
          "departmentId": "edge-ai-automation",
          "department": "Edge AI & Automation",
          "aisleId": "media-conversion",
          "aisle": "Media Conversion",
          "shelfId": "image-format",
          "shelf": "Image Format",
          "offeringId": "image-format-converter",
          "offering": "Image Format Converter",
          "pathIds": [
            "edge-ai-automation",
            "media-conversion",
            "image-format",
            "image-format-converter"
          ],
          "pathLabels": [
            "Edge AI & Automation",
            "Media Conversion",
            "Image Format",
            "Image Format Converter"
          ],
          "taxonomyPath": "edge-ai-automation.media-conversion.image-format.image-format-converter",
          "layout": {
            "department": {
              "id": "edge-ai-automation",
              "name": "Edge AI & Automation"
            },
            "aisle": {
              "id": "media-conversion",
              "name": "Media Conversion"
            },
            "shelf": {
              "id": "image-format",
              "name": "Image Format"
            },
            "offering": {
              "id": "image-format-converter",
              "name": "Image Format Converter"
            },
            "pathIds": [
              "edge-ai-automation",
              "media-conversion",
              "image-format",
              "image-format-converter"
            ],
            "pathLabels": [
              "Edge AI & Automation",
              "Media Conversion",
              "Image Format",
              "Image Format Converter"
            ]
          }
        },
        "description": {
          "short": "Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.",
          "full": "Purpose: Create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nBest use: Use this when an agent needs create a short-lived signed download URL that converts one public image into JPG, PNG, WebP, or AVIF with capped size, fit, quality, and TTL controls. Useful for HEIC-to-JPG-style agent workflows without exposing backend media infrastructure.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: imageUrl, targetFormat.\nOptional fields: width, height, fit, quality, background, filename, ttlSeconds.\n\nAccepted fields:\n- imageUrl (required, string): Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected. Constraints: format: uri.\n- targetFormat (required, string): Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend. Constraints: accepted values: \"jpg\", \"jpeg\", \"png\", \"webp\", \"avif\".\n- width (optional, integer): Optional output width in pixels. If omitted, the source width is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- height (optional, integer): Optional output height in pixels. If omitted, the source height is preserved when the backend supports it. Constraints: min: 1; max: 4096.\n- fit (optional, string): Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds. Constraints: accepted values: \"scale-down\", \"contain\", \"cover\", \"crop\", \"pad\"; default: \"scale-down\".\n- quality (optional, integer): Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded. Constraints: default: 85; min: 1; max: 95.\n- background (optional, string): Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff. Constraints: max length: 40.\n- filename (optional, string): Optional download filename. The service normalizes the extension to match targetFormat. Constraints: max length: 120.\n- ttlSeconds (optional, integer): How long the signed conversion download URL should remain usable, in seconds. Constraints: default: 3600; min: 60; max: 86400.\n\nExample request body:\n```json\n{\n  \"imageUrl\": \"https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg\",\n  \"targetFormat\": \"webp\",\n  \"width\": 800,\n  \"fit\": \"scale-down\",\n  \"quality\": 85,\n  \"ttlSeconds\": 3600\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "imageUrl",
            "targetFormat"
          ],
          "properties": {
            "imageUrl": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected."
            },
            "targetFormat": {
              "type": "string",
              "enum": [
                "jpg",
                "jpeg",
                "png",
                "webp",
                "avif"
              ],
              "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend."
            },
            "width": {
              "type": "integer",
              "minimum": 1,
              "maximum": 4096,
              "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it."
            },
            "height": {
              "type": "integer",
              "minimum": 1,
              "maximum": 4096,
              "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it."
            },
            "fit": {
              "type": "string",
              "enum": [
                "scale-down",
                "contain",
                "cover",
                "crop",
                "pad"
              ],
              "default": "scale-down",
              "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds."
            },
            "quality": {
              "type": "integer",
              "minimum": 1,
              "maximum": 95,
              "default": 85,
              "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded."
            },
            "background": {
              "type": "string",
              "maxLength": 40,
              "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff."
            },
            "filename": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional download filename. The service normalizes the extension to match targetFormat."
            },
            "ttlSeconds": {
              "type": "integer",
              "minimum": 60,
              "maximum": 86400,
              "default": 3600,
              "description": "How long the signed conversion download URL should remain usable, in seconds."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "imageUrl",
            "targetFormat"
          ],
          "properties": {
            "imageUrl": {
              "type": "string",
              "format": "uri",
              "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected."
            },
            "targetFormat": {
              "type": "string",
              "enum": [
                "jpg",
                "jpeg",
                "png",
                "webp",
                "avif"
              ],
              "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend."
            },
            "width": {
              "type": "integer",
              "minimum": 1,
              "maximum": 4096,
              "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it."
            },
            "height": {
              "type": "integer",
              "minimum": 1,
              "maximum": 4096,
              "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it."
            },
            "fit": {
              "type": "string",
              "enum": [
                "scale-down",
                "contain",
                "cover",
                "crop",
                "pad"
              ],
              "default": "scale-down",
              "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds."
            },
            "quality": {
              "type": "integer",
              "minimum": 1,
              "maximum": 95,
              "default": 85,
              "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded."
            },
            "background": {
              "type": "string",
              "maxLength": 40,
              "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff."
            },
            "filename": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional download filename. The service normalizes the extension to match targetFormat."
            },
            "ttlSeconds": {
              "type": "integer",
              "minimum": 60,
              "maximum": 86400,
              "default": 3600,
              "description": "How long the signed conversion download URL should remain usable, in seconds."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "imageUrl",
            "targetFormat"
          ],
          "optional": [
            "width",
            "height",
            "fit",
            "quality",
            "background",
            "filename",
            "ttlSeconds"
          ],
          "fields": [
            {
              "name": "imageUrl",
              "type": "string",
              "required": true,
              "description": "Public HTTP or HTTPS image URL to convert. Local, private, credentialed, intranet, and redirecting URLs are rejected.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "targetFormat",
              "type": "string",
              "required": true,
              "description": "Output image format. Use jpg or jpeg for HEIC-to-JPG-style conversion; png, webp, and avif are also accepted when supported by the image backend.",
              "constraints": {
                "enum": [
                  "jpg",
                  "jpeg",
                  "png",
                  "webp",
                  "avif"
                ]
              }
            },
            {
              "name": "width",
              "type": "integer",
              "required": false,
              "description": "Optional output width in pixels. If omitted, the source width is preserved when the backend supports it.",
              "constraints": {
                "minimum": 1,
                "maximum": 4096
              }
            },
            {
              "name": "height",
              "type": "integer",
              "required": false,
              "description": "Optional output height in pixels. If omitted, the source height is preserved when the backend supports it.",
              "constraints": {
                "minimum": 1,
                "maximum": 4096
              }
            },
            {
              "name": "fit",
              "type": "string",
              "required": false,
              "description": "Resize mode used when width or height is supplied. scale-down preserves the image unless it is larger than the requested bounds.",
              "constraints": {
                "enum": [
                  "scale-down",
                  "contain",
                  "cover",
                  "crop",
                  "pad"
                ],
                "default": "scale-down"
              }
            },
            {
              "name": "quality",
              "type": "integer",
              "required": false,
              "description": "Output quality for lossy formats. Values above 95 are rejected to keep route cost and response size bounded.",
              "constraints": {
                "default": 85,
                "minimum": 1,
                "maximum": 95
              }
            },
            {
              "name": "background",
              "type": "string",
              "required": false,
              "description": "Optional CSS color used by padded or transparent-to-JPEG conversions, for example #ffffff.",
              "constraints": {
                "maxLength": 40
              }
            },
            {
              "name": "filename",
              "type": "string",
              "required": false,
              "description": "Optional download filename. The service normalizes the extension to match targetFormat.",
              "constraints": {
                "maxLength": 120
              }
            },
            {
              "name": "ttlSeconds",
              "type": "integer",
              "required": false,
              "description": "How long the signed conversion download URL should remain usable, in seconds.",
              "constraints": {
                "default": 3600,
                "minimum": 60,
                "maximum": 86400
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
            "targetFormat": "webp",
            "width": 800,
            "fit": "scale-down",
            "quality": 85,
            "ttlSeconds": 3600
          }
        },
        "exampleRequest": {
          "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
          "targetFormat": "webp",
          "width": 800,
          "fit": "scale-down",
          "quality": 85,
          "ttlSeconds": 3600
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "conversion",
            "download",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "conversion": {
              "type": "object",
              "additionalProperties": true
            },
            "download": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "conversion",
            "download",
            "limits"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "conversion": {
              "type": "object",
              "additionalProperties": true
            },
            "download": {
              "type": "object",
              "additionalProperties": true
            },
            "limits": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "image-format-converter",
            "name": "Image Format Converter",
            "department": "Edge AI & Automation"
          },
          "requested": {
            "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/3/3f/JPEG_example_flower.jpg",
            "targetFormat": "webp",
            "width": 800,
            "fit": "scale-down",
            "quality": 85,
            "ttlSeconds": 3600
          },
          "source": {
            "contentType": "image/jpeg",
            "contentLength": 36287,
            "extension": "jpg",
            "validated": true,
            "redirectsAllowed": false
          },
          "conversion": {
            "targetFormat": "webp",
            "contentType": "image/webp",
            "filename": "JPEG_example_flower.webp"
          },
          "download": {
            "url": "https://agentbodega.store/i/signed-token",
            "method": "GET",
            "expiresAt": "2026-07-07T18:00:00.000Z"
          },
          "limits": {
            "maxSourceBytes": 10485760,
            "maxDimension": 4096,
            "maxQuality": 95,
            "maxTtlSeconds": 86400
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/real-estate/listings/search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Real Estate Listing Search",
      "description": "Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.",
      "longDescription": "Purpose: Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nBest use: Use this when an agent needs search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.\nOptional fields: source, mode, market, listingType, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, homeTypes, propertyType, bedrooms, sortBy, daysOnMarket, sqftMin, sqftMax, lotSizeMin, lotSizeMax, yearBuiltMin, yearBuiltMax, amenities, searchUrls, addresses, zpids, propertyIds, locationSlug, state, zipCode, maxRent, petFriendly, maxPages, filterToRequestedCity, includeSchools, includeHistory, includeDetails, smartScrape, maxResults.\n\nAccepted fields:\n- source (optional, string): Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments. Constraints: accepted values: \"auto\", \"zillow\", \"apartments\", \"realtor\"; default: \"auto\".\n- mode (optional, string): Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids. Constraints: accepted values: \"search\", \"url\", \"lookup\"; default: \"search\".\n- market (optional, string): City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required.\n- listingType (optional, string): Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages. Constraints: accepted values: \"for_sale\", \"recently_sold\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- priceMin (optional, integer): Minimum listing price or monthly rent in USD. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- homeTypes (optional, array): Allowed home types. Returned rows without a verifiable matching normalized home type are excluded. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used by the Apartments-backed provider. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used by the Apartments-backed provider.\n- sortBy (optional, string): Managed-source collection order before AgentBodega normalizes and rechecks the requested filters. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- sqftMin (optional, integer): Minimum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- lotSizeMin (optional, integer): Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- lotSizeMax (optional, integer): Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- yearBuiltMin (optional, integer): Earliest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- yearBuiltMax (optional, integer): Latest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- amenities (optional, array): Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields. Constraints: max items: 7.\n- searchUrls (optional, array): Listing or search URLs for url mode. Constraints: max items: 3.\n- addresses (optional, array): Addresses for lookup mode. Constraints: max items: 10.\n- zpids (optional, array): Zillow property ids for lookup mode. Constraints: max items: 10.\n- propertyIds (optional, array): Provider property ids for lookup mode, currently used by the realtor-backed provider. Constraints: max items: 10.\n- locationSlug (optional, string): Provider-specific location slug for rental searches when city/state parsing is not enough.\n- state (optional, string): Two-letter state hint for rental searches. Constraints: min length: 2; max length: 2.\n- zipCode (optional, string): Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values.\n- maxRent (optional, integer): Maximum monthly rent. If omitted, priceMax is reused for rental searches. Constraints: min: 0.\n- petFriendly (optional, boolean): Rental search filter for pet-friendly listings. Constraints: default: false.\n- maxPages (optional, integer): Maximum rendered search pages for the Apartments-backed provider. Constraints: default: 1; min: 1; max: 2.\n- filterToRequestedCity (optional, boolean): Optional exact-city filter for Apartments-backed city searches.\n- includeSchools (optional, boolean): Include school data where the selected provider supports detail extraction. Constraints: default: true.\n- includeHistory (optional, boolean): Include price/tax history where the selected provider supports detail extraction. Constraints: default: true.\n- includeDetails (optional, boolean): Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows. Constraints: default: false.\n- smartScrape (optional, boolean): Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set. Constraints: default: false.\n- maxResults (optional, integer): Maximum listing rows to return. Detail-enriched calls are capped at 10 rows. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"source\": \"zillow\",\n  \"mode\": \"search\",\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"priceMin\": 200000,\n  \"priceMax\": 500000,\n  \"bedsMin\": 3,\n  \"bedsMax\": 4,\n  \"bathsMin\": 2,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1400,\n  \"sqftMax\": 3000,\n  \"homeTypes\": [\n    \"houses\",\n    \"townhomes\"\n  ],\n  \"includeDetails\": false,\n  \"maxResults\": 10\n}\n```",
      "category": "real-estate",
      "kind": "real-estate-tool",
      "departmentId": "real-estate",
      "department": "Real Estate",
      "aisleId": "listing-search",
      "aisle": "Listing Search",
      "shelfId": "homes-and-rentals",
      "shelf": "Homes And Rentals",
      "offeringId": "real-estate-listings-search",
      "offering": "Real Estate Listing Search",
      "pathIds": [
        "real-estate",
        "listing-search",
        "homes-and-rentals",
        "real-estate-listings-search"
      ],
      "pathLabels": [
        "Real Estate",
        "Listing Search",
        "Homes And Rentals",
        "Real Estate Listing Search"
      ],
      "taxonomyPath": "real-estate.listing-search.homes-and-rentals.real-estate-listings-search",
      "layout": {
        "department": {
          "id": "real-estate",
          "name": "Real Estate"
        },
        "aisle": {
          "id": "listing-search",
          "name": "Listing Search"
        },
        "shelf": {
          "id": "homes-and-rentals",
          "name": "Homes And Rentals"
        },
        "offering": {
          "id": "real-estate-listings-search",
          "name": "Real Estate Listing Search"
        },
        "pathIds": [
          "real-estate",
          "listing-search",
          "homes-and-rentals",
          "real-estate-listings-search"
        ],
        "pathLabels": [
          "Real Estate",
          "Listing Search",
          "Homes And Rentals",
          "Real Estate Listing Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "real-estate",
        "property-search",
        "home-listings",
        "housing",
        "for-sale",
        "for-rent",
        "rentals",
        "apartments",
        "apartments-com",
        "zillow",
        "realtor",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "50000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "50000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "description": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.",
        "anyOf": [
          {
            "title": "Market search",
            "properties": {
              "mode": {
                "const": "search"
              }
            },
            "anyOf": [
              {
                "required": [
                  "market"
                ]
              },
              {
                "required": [
                  "zipCode"
                ]
              }
            ]
          },
          {
            "title": "URL search",
            "properties": {
              "mode": {
                "const": "url"
              }
            },
            "required": [
              "searchUrls"
            ]
          },
          {
            "title": "Property lookup",
            "properties": {
              "mode": {
                "const": "lookup"
              }
            },
            "anyOf": [
              {
                "required": [
                  "addresses"
                ]
              },
              {
                "required": [
                  "zpids"
                ]
              },
              {
                "required": [
                  "propertyIds"
                ]
              }
            ]
          }
        ],
        "properties": {
          "source": {
            "type": "string",
            "enum": [
              "auto",
              "zillow",
              "apartments",
              "realtor"
            ],
            "default": "auto",
            "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments."
          },
          "mode": {
            "type": "string",
            "enum": [
              "search",
              "url",
              "lookup"
            ],
            "default": "search",
            "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids."
          },
          "market": {
            "type": "string",
            "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
          },
          "listingType": {
            "type": "string",
            "enum": [
              "for_sale",
              "recently_sold",
              "for_rent",
              "foreclosure"
            ],
            "default": "for_sale",
            "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages."
          },
          "priceMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum listing price or monthly rent in USD."
          },
          "priceMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum listing price or monthly rent in USD."
          },
          "bedsMin": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
          },
          "bedsMax": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
          },
          "bathsMin": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bathrooms. Half-bath values are accepted."
          },
          "bathsMax": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bathrooms. Half-bath values are accepted."
          },
          "homeTypes": {
            "type": "array",
            "maxItems": 7,
            "items": {
              "type": "string",
              "enum": [
                "houses",
                "townhomes",
                "multifamily",
                "condos",
                "land",
                "apartments",
                "manufactured"
              ],
              "description": "Home Types item filter for Real Estate Listing Search. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
            },
            "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded."
          },
          "propertyType": {
            "type": "string",
            "enum": [
              "apartments",
              "houses",
              "townhomes",
              "condos"
            ],
            "description": "Rental property type used by the Apartments-backed provider."
          },
          "bedrooms": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "any",
                  "studio",
                  "1",
                  "2",
                  "3",
                  "4",
                  "5+"
                ]
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 5
              }
            ],
            "description": "Rental bedroom filter used by the Apartments-backed provider."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "newest",
              "relevance",
              "pricea",
              "priced",
              "beds",
              "baths",
              "size",
              "lot",
              "zest"
            ],
            "default": "newest",
            "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters."
          },
          "daysOnMarket": {
            "type": "string",
            "enum": [
              "",
              "1",
              "7",
              "14",
              "30",
              "90",
              "6m",
              "12m",
              "24m",
              "36m"
            ],
            "default": "",
            "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set."
          },
          "sqftMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set."
          },
          "sqftMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set."
          },
          "lotSizeMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set."
          },
          "lotSizeMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set."
          },
          "yearBuiltMin": {
            "type": "integer",
            "minimum": 1800,
            "maximum": 2030,
            "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set."
          },
          "yearBuiltMax": {
            "type": "integer",
            "minimum": 1800,
            "maximum": 2030,
            "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set."
          },
          "amenities": {
            "type": "array",
            "maxItems": 7,
            "items": {
              "type": "string",
              "enum": [
                "pool",
                "ac",
                "waterfront",
                "single-story",
                "garage",
                "basement",
                "3d-tour"
              ],
              "description": "Amenities item filter for Real Estate Listing Search. Accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\". Constraints: accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\"."
            },
            "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields."
          },
          "searchUrls": {
            "type": "array",
            "maxItems": 3,
            "items": {
              "type": "string",
              "format": "uri",
              "description": "Search Urls item value for Real Estate Listing Search. Constraints: format: uri."
            },
            "description": "Listing or search URLs for url mode."
          },
          "addresses": {
            "type": "array",
            "maxItems": 10,
            "items": {
              "type": "string",
              "description": "Addresses item value for Real Estate Listing Search."
            },
            "description": "Addresses for lookup mode."
          },
          "zpids": {
            "type": "array",
            "maxItems": 10,
            "items": {
              "type": "string",
              "description": "Zpids item value for Real Estate Listing Search."
            },
            "description": "Zillow property ids for lookup mode."
          },
          "propertyIds": {
            "type": "array",
            "maxItems": 10,
            "items": {
              "type": "string",
              "description": "Property Ids item value for Real Estate Listing Search."
            },
            "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider."
          },
          "locationSlug": {
            "type": "string",
            "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
          },
          "state": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "description": "Two-letter state hint for rental searches."
          },
          "zipCode": {
            "type": "string",
            "pattern": "^\\d{5}$",
            "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
          },
          "maxRent": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches."
          },
          "petFriendly": {
            "type": "boolean",
            "default": false,
            "description": "Rental search filter for pet-friendly listings."
          },
          "maxPages": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2,
            "default": 1,
            "description": "Maximum rendered search pages for the Apartments-backed provider."
          },
          "filterToRequestedCity": {
            "type": "boolean",
            "description": "Optional exact-city filter for Apartments-backed city searches."
          },
          "includeSchools": {
            "type": "boolean",
            "default": true,
            "description": "Include school data where the selected provider supports detail extraction."
          },
          "includeHistory": {
            "type": "boolean",
            "default": true,
            "description": "Include price/tax history where the selected provider supports detail extraction."
          },
          "includeDetails": {
            "type": "boolean",
            "default": false,
            "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows."
          },
          "smartScrape": {
            "type": "boolean",
            "default": false,
            "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set."
          },
          "maxResults": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 10,
            "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "source",
          "mode",
          "market",
          "listingType",
          "priceMin",
          "priceMax",
          "bedsMin",
          "bedsMax",
          "bathsMin",
          "bathsMax",
          "homeTypes",
          "propertyType",
          "bedrooms",
          "sortBy",
          "daysOnMarket",
          "sqftMin",
          "sqftMax",
          "lotSizeMin",
          "lotSizeMax",
          "yearBuiltMin",
          "yearBuiltMax",
          "amenities",
          "searchUrls",
          "addresses",
          "zpids",
          "propertyIds",
          "locationSlug",
          "state",
          "zipCode",
          "maxRent",
          "petFriendly",
          "maxPages",
          "filterToRequestedCity",
          "includeSchools",
          "includeHistory",
          "includeDetails",
          "smartScrape",
          "maxResults"
        ],
        "fields": [
          {
            "name": "source",
            "type": "string",
            "required": false,
            "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments.",
            "constraints": {
              "enum": [
                "auto",
                "zillow",
                "apartments",
                "realtor"
              ],
              "default": "auto"
            }
          },
          {
            "name": "mode",
            "type": "string",
            "required": false,
            "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids.",
            "constraints": {
              "enum": [
                "search",
                "url",
                "lookup"
              ],
              "default": "search"
            }
          },
          {
            "name": "market",
            "type": "string",
            "required": false,
            "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
          },
          {
            "name": "listingType",
            "type": "string",
            "required": false,
            "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages.",
            "constraints": {
              "enum": [
                "for_sale",
                "recently_sold",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale"
            }
          },
          {
            "name": "priceMin",
            "type": "integer",
            "required": false,
            "description": "Minimum listing price or monthly rent in USD.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "priceMax",
            "type": "integer",
            "required": false,
            "description": "Maximum listing price or monthly rent in USD.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "bedsMin",
            "type": "integer",
            "required": false,
            "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bedsMax",
            "type": "integer",
            "required": false,
            "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMin",
            "type": "number",
            "required": false,
            "description": "Minimum bathrooms. Half-bath values are accepted.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMax",
            "type": "number",
            "required": false,
            "description": "Maximum bathrooms. Half-bath values are accepted.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "homeTypes",
            "type": "array",
            "required": false,
            "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded.",
            "constraints": {
              "maxItems": 7
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "propertyType",
            "type": "string",
            "required": false,
            "description": "Rental property type used by the Apartments-backed provider.",
            "constraints": {
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ]
            }
          },
          {
            "name": "bedrooms",
            "type": "any",
            "required": false,
            "description": "Rental bedroom filter used by the Apartments-backed provider."
          },
          {
            "name": "sortBy",
            "type": "string",
            "required": false,
            "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters.",
            "constraints": {
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest"
            }
          },
          {
            "name": "daysOnMarket",
            "type": "string",
            "required": false,
            "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set.",
            "constraints": {
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": ""
            }
          },
          {
            "name": "sqftMin",
            "type": "integer",
            "required": false,
            "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "sqftMax",
            "type": "integer",
            "required": false,
            "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "lotSizeMin",
            "type": "integer",
            "required": false,
            "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "lotSizeMax",
            "type": "integer",
            "required": false,
            "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "yearBuiltMin",
            "type": "integer",
            "required": false,
            "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set.",
            "constraints": {
              "minimum": 1800,
              "maximum": 2030
            }
          },
          {
            "name": "yearBuiltMax",
            "type": "integer",
            "required": false,
            "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set.",
            "constraints": {
              "minimum": 1800,
              "maximum": 2030
            }
          },
          {
            "name": "amenities",
            "type": "array",
            "required": false,
            "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields.",
            "constraints": {
              "maxItems": 7
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "searchUrls",
            "type": "array",
            "required": false,
            "description": "Listing or search URLs for url mode.",
            "constraints": {
              "maxItems": 3
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "addresses",
            "type": "array",
            "required": false,
            "description": "Addresses for lookup mode.",
            "constraints": {
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "zpids",
            "type": "array",
            "required": false,
            "description": "Zillow property ids for lookup mode.",
            "constraints": {
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "propertyIds",
            "type": "array",
            "required": false,
            "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider.",
            "constraints": {
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "locationSlug",
            "type": "string",
            "required": false,
            "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
          },
          {
            "name": "state",
            "type": "string",
            "required": false,
            "description": "Two-letter state hint for rental searches.",
            "constraints": {
              "minLength": 2,
              "maxLength": 2
            }
          },
          {
            "name": "zipCode",
            "type": "string",
            "required": false,
            "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
          },
          {
            "name": "maxRent",
            "type": "integer",
            "required": false,
            "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "petFriendly",
            "type": "boolean",
            "required": false,
            "description": "Rental search filter for pet-friendly listings.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "maxPages",
            "type": "integer",
            "required": false,
            "description": "Maximum rendered search pages for the Apartments-backed provider.",
            "constraints": {
              "default": 1,
              "minimum": 1,
              "maximum": 2
            }
          },
          {
            "name": "filterToRequestedCity",
            "type": "boolean",
            "required": false,
            "description": "Optional exact-city filter for Apartments-backed city searches."
          },
          {
            "name": "includeSchools",
            "type": "boolean",
            "required": false,
            "description": "Include school data where the selected provider supports detail extraction.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeHistory",
            "type": "boolean",
            "required": false,
            "description": "Include price/tax history where the selected provider supports detail extraction.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeDetails",
            "type": "boolean",
            "required": false,
            "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "smartScrape",
            "type": "boolean",
            "required": false,
            "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "maxResults",
            "type": "integer",
            "required": false,
            "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 20
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "source": "zillow",
          "mode": "search",
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "priceMin": 200000,
          "priceMax": 500000,
          "bedsMin": 3,
          "bedsMax": 4,
          "bathsMin": 2,
          "bathsMax": 4,
          "sqftMin": 1400,
          "sqftMax": 3000,
          "homeTypes": [
            "houses",
            "townhomes"
          ],
          "includeDetails": false,
          "maxResults": 10
        },
        "requirements": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned."
      },
      "exampleRequest": {
        "source": "zillow",
        "mode": "search",
        "market": "Houston, TX 77008",
        "zipCode": "77008",
        "listingType": "for_sale",
        "priceMin": 200000,
        "priceMax": 500000,
        "bedsMin": 3,
        "bedsMax": 4,
        "bathsMin": 2,
        "bathsMax": 4,
        "sqftMin": 1400,
        "sqftMax": 3000,
        "homeTypes": [
          "houses",
          "townhomes"
        ],
        "includeDetails": false,
        "maxResults": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "result_count",
          "results",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "result_count": {
            "type": "integer"
          },
          "filter_summary": {
            "type": "object",
            "description": "Counts before and after AgentBodega rechecks the requested filters against normalized rows.",
            "properties": {
              "normalized_count": {
                "type": "integer"
              },
              "matched_count": {
                "type": "integer"
              },
              "returned_count": {
                "type": "integer"
              },
              "excluded_count": {
                "type": "integer"
              }
            },
            "additionalProperties": false
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "source",
                "listing_id",
                "address"
              ],
              "properties": {
                "source": {
                  "type": "string",
                  "description": "Managed source class used to normalize the listing."
                },
                "listing_id": {
                  "type": "string"
                },
                "address": {
                  "type": "string"
                },
                "street": {
                  "type": "string"
                },
                "city": {
                  "type": "string"
                },
                "state": {
                  "type": "string"
                },
                "postal_code": {
                  "type": "string"
                },
                "latitude": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "longitude": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "price_usd": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "price_display": {
                  "type": "string"
                },
                "zestimate_usd": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "rent_zestimate_usd": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "tax_assessed_value_usd": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "beds": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "baths": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "sqft": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "lot_sqft": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "year_built": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "home_type": {
                  "type": "string"
                },
                "listing_status": {
                  "type": "string"
                },
                "days_on_market": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "description": {
                  "type": "string"
                },
                "listing_url": {
                  "type": "string",
                  "format": "uri"
                },
                "image_url": {
                  "type": "string",
                  "format": "uri"
                },
                "photo_urls": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uri"
                  }
                },
                "agent": {
                  "type": "object",
                  "additionalProperties": true
                },
                "price_history": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "tax_history": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "additionalProperties": true
            }
          },
          "source": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "real-estate-listings-search",
          "name": "Real Estate Listing Search",
          "department": "Real Estate"
        },
        "requested": {
          "source": "zillow",
          "mode": "search",
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "filters": {
            "zipCode": "77008",
            "priceMin": 200000,
            "priceMax": 500000,
            "bedsMin": 3,
            "bedsMax": 4,
            "bathsMin": 2,
            "bathsMax": 4,
            "sqftMin": 1400,
            "sqftMax": 3000
          },
          "maxResults": 10,
          "includeDetails": false
        },
        "source": {
          "selected": "zillow",
          "routing": "managed-adapter",
          "resultFreshness": "live-run",
          "upstreamDetailsDisclosed": false
        },
        "result_count": 1,
        "filter_summary": {
          "normalized_count": 2,
          "matched_count": 1,
          "returned_count": 1,
          "excluded_count": 1
        },
        "results": [
          {
            "source": "zillow",
            "listing_id": "84007409",
            "address": "1328 W 23rd St Unit A, Houston, TX 77008",
            "price_usd": 450000,
            "beds": 3,
            "baths": 4,
            "sqft": 2043
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "source": "zillow",
                "mode": "search",
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "priceMin": 200000,
                "priceMax": 500000,
                "bedsMin": 3,
                "bedsMax": 4,
                "bathsMin": 2,
                "bathsMax": 4,
                "sqftMin": 1400,
                "sqftMax": 3000,
                "homeTypes": [
                  "houses",
                  "townhomes"
                ],
                "includeDetails": false,
                "maxResults": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "real-estate-listings-search",
                  "name": "Real Estate Listing Search",
                  "department": "Real Estate"
                },
                "requested": {
                  "source": "zillow",
                  "mode": "search",
                  "market": "Houston, TX 77008",
                  "zipCode": "77008",
                  "listingType": "for_sale",
                  "filters": {
                    "zipCode": "77008",
                    "priceMin": 200000,
                    "priceMax": 500000,
                    "bedsMin": 3,
                    "bedsMax": 4,
                    "bathsMin": 2,
                    "bathsMax": 4,
                    "sqftMin": 1400,
                    "sqftMax": 3000
                  },
                  "maxResults": 10,
                  "includeDetails": false
                },
                "source": {
                  "selected": "zillow",
                  "routing": "managed-adapter",
                  "resultFreshness": "live-run",
                  "upstreamDetailsDisclosed": false
                },
                "result_count": 1,
                "filter_summary": {
                  "normalized_count": 2,
                  "matched_count": 1,
                  "returned_count": 1,
                  "excluded_count": 1
                },
                "results": [
                  {
                    "source": "zillow",
                    "listing_id": "84007409",
                    "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                    "price_usd": 450000,
                    "beds": 3,
                    "baths": 4,
                    "sqft": 2043
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/real-estate/listings/search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "description": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.",
                    "anyOf": [
                      {
                        "title": "Market search",
                        "properties": {
                          "mode": {
                            "const": "search"
                          }
                        },
                        "anyOf": [
                          {
                            "required": [
                              "market"
                            ]
                          },
                          {
                            "required": [
                              "zipCode"
                            ]
                          }
                        ]
                      },
                      {
                        "title": "URL search",
                        "properties": {
                          "mode": {
                            "const": "url"
                          }
                        },
                        "required": [
                          "searchUrls"
                        ]
                      },
                      {
                        "title": "Property lookup",
                        "properties": {
                          "mode": {
                            "const": "lookup"
                          }
                        },
                        "anyOf": [
                          {
                            "required": [
                              "addresses"
                            ]
                          },
                          {
                            "required": [
                              "zpids"
                            ]
                          },
                          {
                            "required": [
                              "propertyIds"
                            ]
                          }
                        ]
                      }
                    ],
                    "properties": {
                      "source": {
                        "type": "string",
                        "enum": [
                          "auto",
                          "zillow",
                          "apartments",
                          "realtor"
                        ],
                        "default": "auto",
                        "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments."
                      },
                      "mode": {
                        "type": "string",
                        "enum": [
                          "search",
                          "url",
                          "lookup"
                        ],
                        "default": "search",
                        "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids."
                      },
                      "market": {
                        "type": "string",
                        "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
                      },
                      "listingType": {
                        "type": "string",
                        "enum": [
                          "for_sale",
                          "recently_sold",
                          "for_rent",
                          "foreclosure"
                        ],
                        "default": "for_sale",
                        "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages."
                      },
                      "priceMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum listing price or monthly rent in USD."
                      },
                      "priceMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum listing price or monthly rent in USD."
                      },
                      "bedsMin": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
                      },
                      "bedsMax": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
                      },
                      "bathsMin": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bathrooms. Half-bath values are accepted."
                      },
                      "bathsMax": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bathrooms. Half-bath values are accepted."
                      },
                      "homeTypes": {
                        "type": "array",
                        "maxItems": 7,
                        "items": {
                          "type": "string",
                          "enum": [
                            "houses",
                            "townhomes",
                            "multifamily",
                            "condos",
                            "land",
                            "apartments",
                            "manufactured"
                          ],
                          "description": "Home Types item filter for Real Estate Listing Search. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                        },
                        "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded."
                      },
                      "propertyType": {
                        "type": "string",
                        "enum": [
                          "apartments",
                          "houses",
                          "townhomes",
                          "condos"
                        ],
                        "description": "Rental property type used by the Apartments-backed provider."
                      },
                      "bedrooms": {
                        "oneOf": [
                          {
                            "type": "string",
                            "enum": [
                              "any",
                              "studio",
                              "1",
                              "2",
                              "3",
                              "4",
                              "5+"
                            ]
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 5
                          }
                        ],
                        "description": "Rental bedroom filter used by the Apartments-backed provider."
                      },
                      "sortBy": {
                        "type": "string",
                        "enum": [
                          "newest",
                          "relevance",
                          "pricea",
                          "priced",
                          "beds",
                          "baths",
                          "size",
                          "lot",
                          "zest"
                        ],
                        "default": "newest",
                        "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters."
                      },
                      "daysOnMarket": {
                        "type": "string",
                        "enum": [
                          "",
                          "1",
                          "7",
                          "14",
                          "30",
                          "90",
                          "6m",
                          "12m",
                          "24m",
                          "36m"
                        ],
                        "default": "",
                        "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set."
                      },
                      "sqftMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set."
                      },
                      "sqftMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set."
                      },
                      "lotSizeMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set."
                      },
                      "lotSizeMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set."
                      },
                      "yearBuiltMin": {
                        "type": "integer",
                        "minimum": 1800,
                        "maximum": 2030,
                        "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set."
                      },
                      "yearBuiltMax": {
                        "type": "integer",
                        "minimum": 1800,
                        "maximum": 2030,
                        "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set."
                      },
                      "amenities": {
                        "type": "array",
                        "maxItems": 7,
                        "items": {
                          "type": "string",
                          "enum": [
                            "pool",
                            "ac",
                            "waterfront",
                            "single-story",
                            "garage",
                            "basement",
                            "3d-tour"
                          ],
                          "description": "Amenities item filter for Real Estate Listing Search. Accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\". Constraints: accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\"."
                        },
                        "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields."
                      },
                      "searchUrls": {
                        "type": "array",
                        "maxItems": 3,
                        "items": {
                          "type": "string",
                          "format": "uri",
                          "description": "Search Urls item value for Real Estate Listing Search. Constraints: format: uri."
                        },
                        "description": "Listing or search URLs for url mode."
                      },
                      "addresses": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "description": "Addresses item value for Real Estate Listing Search."
                        },
                        "description": "Addresses for lookup mode."
                      },
                      "zpids": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "description": "Zpids item value for Real Estate Listing Search."
                        },
                        "description": "Zillow property ids for lookup mode."
                      },
                      "propertyIds": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "description": "Property Ids item value for Real Estate Listing Search."
                        },
                        "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider."
                      },
                      "locationSlug": {
                        "type": "string",
                        "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
                      },
                      "state": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 2,
                        "description": "Two-letter state hint for rental searches."
                      },
                      "zipCode": {
                        "type": "string",
                        "pattern": "^\\d{5}$",
                        "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
                      },
                      "maxRent": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches."
                      },
                      "petFriendly": {
                        "type": "boolean",
                        "default": false,
                        "description": "Rental search filter for pet-friendly listings."
                      },
                      "maxPages": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 2,
                        "default": 1,
                        "description": "Maximum rendered search pages for the Apartments-backed provider."
                      },
                      "filterToRequestedCity": {
                        "type": "boolean",
                        "description": "Optional exact-city filter for Apartments-backed city searches."
                      },
                      "includeSchools": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include school data where the selected provider supports detail extraction."
                      },
                      "includeHistory": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include price/tax history where the selected provider supports detail extraction."
                      },
                      "includeDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows."
                      },
                      "smartScrape": {
                        "type": "boolean",
                        "default": false,
                        "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set."
                      },
                      "maxResults": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 10,
                        "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "result_count",
                      "results",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "result_count": {
                        "type": "integer"
                      },
                      "filter_summary": {
                        "type": "object",
                        "description": "Counts before and after AgentBodega rechecks the requested filters against normalized rows.",
                        "properties": {
                          "normalized_count": {
                            "type": "integer"
                          },
                          "matched_count": {
                            "type": "integer"
                          },
                          "returned_count": {
                            "type": "integer"
                          },
                          "excluded_count": {
                            "type": "integer"
                          }
                        },
                        "additionalProperties": false
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "source",
                            "listing_id",
                            "address"
                          ],
                          "properties": {
                            "source": {
                              "type": "string",
                              "description": "Managed source class used to normalize the listing."
                            },
                            "listing_id": {
                              "type": "string"
                            },
                            "address": {
                              "type": "string"
                            },
                            "street": {
                              "type": "string"
                            },
                            "city": {
                              "type": "string"
                            },
                            "state": {
                              "type": "string"
                            },
                            "postal_code": {
                              "type": "string"
                            },
                            "latitude": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "longitude": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "price_usd": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "price_display": {
                              "type": "string"
                            },
                            "zestimate_usd": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "rent_zestimate_usd": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "tax_assessed_value_usd": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "beds": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "baths": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "sqft": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "lot_sqft": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "year_built": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "home_type": {
                              "type": "string"
                            },
                            "listing_status": {
                              "type": "string"
                            },
                            "days_on_market": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "description": {
                              "type": "string"
                            },
                            "listing_url": {
                              "type": "string",
                              "format": "uri"
                            },
                            "image_url": {
                              "type": "string",
                              "format": "uri"
                            },
                            "photo_urls": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "format": "uri"
                              }
                            },
                            "agent": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "price_history": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "additionalProperties": true
                              }
                            },
                            "tax_history": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "additionalProperties": true
                              }
                            },
                            "warnings": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "source": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "real-estate-listings-search",
            "url": "https://agentbodega.store/api/real-estate/listings/search",
            "method": "POST",
            "description": "Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.",
            "longDescription": "Purpose: Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nBest use: Use this when an agent needs search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.\nOptional fields: source, mode, market, listingType, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, homeTypes, propertyType, bedrooms, sortBy, daysOnMarket, sqftMin, sqftMax, lotSizeMin, lotSizeMax, yearBuiltMin, yearBuiltMax, amenities, searchUrls, addresses, zpids, propertyIds, locationSlug, state, zipCode, maxRent, petFriendly, maxPages, filterToRequestedCity, includeSchools, includeHistory, includeDetails, smartScrape, maxResults.\n\nAccepted fields:\n- source (optional, string): Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments. Constraints: accepted values: \"auto\", \"zillow\", \"apartments\", \"realtor\"; default: \"auto\".\n- mode (optional, string): Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids. Constraints: accepted values: \"search\", \"url\", \"lookup\"; default: \"search\".\n- market (optional, string): City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required.\n- listingType (optional, string): Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages. Constraints: accepted values: \"for_sale\", \"recently_sold\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- priceMin (optional, integer): Minimum listing price or monthly rent in USD. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- homeTypes (optional, array): Allowed home types. Returned rows without a verifiable matching normalized home type are excluded. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used by the Apartments-backed provider. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used by the Apartments-backed provider.\n- sortBy (optional, string): Managed-source collection order before AgentBodega normalizes and rechecks the requested filters. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- sqftMin (optional, integer): Minimum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- lotSizeMin (optional, integer): Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- lotSizeMax (optional, integer): Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- yearBuiltMin (optional, integer): Earliest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- yearBuiltMax (optional, integer): Latest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- amenities (optional, array): Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields. Constraints: max items: 7.\n- searchUrls (optional, array): Listing or search URLs for url mode. Constraints: max items: 3.\n- addresses (optional, array): Addresses for lookup mode. Constraints: max items: 10.\n- zpids (optional, array): Zillow property ids for lookup mode. Constraints: max items: 10.\n- propertyIds (optional, array): Provider property ids for lookup mode, currently used by the realtor-backed provider. Constraints: max items: 10.\n- locationSlug (optional, string): Provider-specific location slug for rental searches when city/state parsing is not enough.\n- state (optional, string): Two-letter state hint for rental searches. Constraints: min length: 2; max length: 2.\n- zipCode (optional, string): Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values.\n- maxRent (optional, integer): Maximum monthly rent. If omitted, priceMax is reused for rental searches. Constraints: min: 0.\n- petFriendly (optional, boolean): Rental search filter for pet-friendly listings. Constraints: default: false.\n- maxPages (optional, integer): Maximum rendered search pages for the Apartments-backed provider. Constraints: default: 1; min: 1; max: 2.\n- filterToRequestedCity (optional, boolean): Optional exact-city filter for Apartments-backed city searches.\n- includeSchools (optional, boolean): Include school data where the selected provider supports detail extraction. Constraints: default: true.\n- includeHistory (optional, boolean): Include price/tax history where the selected provider supports detail extraction. Constraints: default: true.\n- includeDetails (optional, boolean): Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows. Constraints: default: false.\n- smartScrape (optional, boolean): Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set. Constraints: default: false.\n- maxResults (optional, integer): Maximum listing rows to return. Detail-enriched calls are capped at 10 rows. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"source\": \"zillow\",\n  \"mode\": \"search\",\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"priceMin\": 200000,\n  \"priceMax\": 500000,\n  \"bedsMin\": 3,\n  \"bedsMax\": 4,\n  \"bathsMin\": 2,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1400,\n  \"sqftMax\": 3000,\n  \"homeTypes\": [\n    \"houses\",\n    \"townhomes\"\n  ],\n  \"includeDetails\": false,\n  \"maxResults\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Real Estate Listing Search",
            "category": "real-estate",
            "kind": "real-estate-tool",
            "tags": [
              "real-estate",
              "property-search",
              "home-listings",
              "housing",
              "for-sale",
              "for-rent",
              "rentals",
              "apartments",
              "apartments-com",
              "zillow",
              "realtor",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "source",
                "mode",
                "market",
                "listingType",
                "priceMin",
                "priceMax",
                "bedsMin",
                "bedsMax",
                "bathsMin",
                "bathsMax",
                "homeTypes",
                "propertyType",
                "bedrooms",
                "sortBy",
                "daysOnMarket",
                "sqftMin",
                "sqftMax",
                "lotSizeMin",
                "lotSizeMax",
                "yearBuiltMin",
                "yearBuiltMax",
                "amenities",
                "searchUrls",
                "addresses",
                "zpids",
                "propertyIds",
                "locationSlug",
                "state",
                "zipCode",
                "maxRent",
                "petFriendly",
                "maxPages",
                "filterToRequestedCity",
                "includeSchools",
                "includeHistory",
                "includeDetails",
                "smartScrape",
                "maxResults"
              ],
              "fields": [
                {
                  "name": "source",
                  "type": "string",
                  "required": false,
                  "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments.",
                  "constraints": {
                    "enum": [
                      "auto",
                      "zillow",
                      "apartments",
                      "realtor"
                    ],
                    "default": "auto"
                  }
                },
                {
                  "name": "mode",
                  "type": "string",
                  "required": false,
                  "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids.",
                  "constraints": {
                    "enum": [
                      "search",
                      "url",
                      "lookup"
                    ],
                    "default": "search"
                  }
                },
                {
                  "name": "market",
                  "type": "string",
                  "required": false,
                  "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
                },
                {
                  "name": "listingType",
                  "type": "string",
                  "required": false,
                  "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages.",
                  "constraints": {
                    "enum": [
                      "for_sale",
                      "recently_sold",
                      "for_rent",
                      "foreclosure"
                    ],
                    "default": "for_sale"
                  }
                },
                {
                  "name": "priceMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum listing price or monthly rent in USD.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "priceMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum listing price or monthly rent in USD.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "bedsMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bedsMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMin",
                  "type": "number",
                  "required": false,
                  "description": "Minimum bathrooms. Half-bath values are accepted.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMax",
                  "type": "number",
                  "required": false,
                  "description": "Maximum bathrooms. Half-bath values are accepted.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "homeTypes",
                  "type": "array",
                  "required": false,
                  "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded.",
                  "constraints": {
                    "maxItems": 7
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "propertyType",
                  "type": "string",
                  "required": false,
                  "description": "Rental property type used by the Apartments-backed provider.",
                  "constraints": {
                    "enum": [
                      "apartments",
                      "houses",
                      "townhomes",
                      "condos"
                    ]
                  }
                },
                {
                  "name": "bedrooms",
                  "type": "any",
                  "required": false,
                  "description": "Rental bedroom filter used by the Apartments-backed provider."
                },
                {
                  "name": "sortBy",
                  "type": "string",
                  "required": false,
                  "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters.",
                  "constraints": {
                    "enum": [
                      "newest",
                      "relevance",
                      "pricea",
                      "priced",
                      "beds",
                      "baths",
                      "size",
                      "lot",
                      "zest"
                    ],
                    "default": "newest"
                  }
                },
                {
                  "name": "daysOnMarket",
                  "type": "string",
                  "required": false,
                  "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set.",
                  "constraints": {
                    "enum": [
                      "",
                      "1",
                      "7",
                      "14",
                      "30",
                      "90",
                      "6m",
                      "12m",
                      "24m",
                      "36m"
                    ],
                    "default": ""
                  }
                },
                {
                  "name": "sqftMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "sqftMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "lotSizeMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "lotSizeMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "yearBuiltMin",
                  "type": "integer",
                  "required": false,
                  "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set.",
                  "constraints": {
                    "minimum": 1800,
                    "maximum": 2030
                  }
                },
                {
                  "name": "yearBuiltMax",
                  "type": "integer",
                  "required": false,
                  "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set.",
                  "constraints": {
                    "minimum": 1800,
                    "maximum": 2030
                  }
                },
                {
                  "name": "amenities",
                  "type": "array",
                  "required": false,
                  "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields.",
                  "constraints": {
                    "maxItems": 7
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "searchUrls",
                  "type": "array",
                  "required": false,
                  "description": "Listing or search URLs for url mode.",
                  "constraints": {
                    "maxItems": 3
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "addresses",
                  "type": "array",
                  "required": false,
                  "description": "Addresses for lookup mode.",
                  "constraints": {
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "zpids",
                  "type": "array",
                  "required": false,
                  "description": "Zillow property ids for lookup mode.",
                  "constraints": {
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "propertyIds",
                  "type": "array",
                  "required": false,
                  "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider.",
                  "constraints": {
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "locationSlug",
                  "type": "string",
                  "required": false,
                  "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
                },
                {
                  "name": "state",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter state hint for rental searches.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "zipCode",
                  "type": "string",
                  "required": false,
                  "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
                },
                {
                  "name": "maxRent",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "petFriendly",
                  "type": "boolean",
                  "required": false,
                  "description": "Rental search filter for pet-friendly listings.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "maxPages",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum rendered search pages for the Apartments-backed provider.",
                  "constraints": {
                    "default": 1,
                    "minimum": 1,
                    "maximum": 2
                  }
                },
                {
                  "name": "filterToRequestedCity",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional exact-city filter for Apartments-backed city searches."
                },
                {
                  "name": "includeSchools",
                  "type": "boolean",
                  "required": false,
                  "description": "Include school data where the selected provider supports detail extraction.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeHistory",
                  "type": "boolean",
                  "required": false,
                  "description": "Include price/tax history where the selected provider supports detail extraction.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "smartScrape",
                  "type": "boolean",
                  "required": false,
                  "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "maxResults",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 20
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "source": "zillow",
                "mode": "search",
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "priceMin": 200000,
                "priceMax": 500000,
                "bedsMin": 3,
                "bedsMax": 4,
                "bathsMin": 2,
                "bathsMax": 4,
                "sqftMin": 1400,
                "sqftMax": 3000,
                "homeTypes": [
                  "houses",
                  "townhomes"
                ],
                "includeDetails": false,
                "maxResults": 10
              },
              "requirements": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned."
            },
            "inputSchema": {
              "type": "object",
              "description": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.",
              "anyOf": [
                {
                  "title": "Market search",
                  "properties": {
                    "mode": {
                      "const": "search"
                    }
                  },
                  "anyOf": [
                    {
                      "required": [
                        "market"
                      ]
                    },
                    {
                      "required": [
                        "zipCode"
                      ]
                    }
                  ]
                },
                {
                  "title": "URL search",
                  "properties": {
                    "mode": {
                      "const": "url"
                    }
                  },
                  "required": [
                    "searchUrls"
                  ]
                },
                {
                  "title": "Property lookup",
                  "properties": {
                    "mode": {
                      "const": "lookup"
                    }
                  },
                  "anyOf": [
                    {
                      "required": [
                        "addresses"
                      ]
                    },
                    {
                      "required": [
                        "zpids"
                      ]
                    },
                    {
                      "required": [
                        "propertyIds"
                      ]
                    }
                  ]
                }
              ],
              "properties": {
                "source": {
                  "type": "string",
                  "enum": [
                    "auto",
                    "zillow",
                    "apartments",
                    "realtor"
                  ],
                  "default": "auto",
                  "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments."
                },
                "mode": {
                  "type": "string",
                  "enum": [
                    "search",
                    "url",
                    "lookup"
                  ],
                  "default": "search",
                  "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids."
                },
                "market": {
                  "type": "string",
                  "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
                },
                "listingType": {
                  "type": "string",
                  "enum": [
                    "for_sale",
                    "recently_sold",
                    "for_rent",
                    "foreclosure"
                  ],
                  "default": "for_sale",
                  "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages."
                },
                "priceMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum listing price or monthly rent in USD."
                },
                "priceMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum listing price or monthly rent in USD."
                },
                "bedsMin": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
                },
                "bedsMax": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
                },
                "bathsMin": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bathrooms. Half-bath values are accepted."
                },
                "bathsMax": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bathrooms. Half-bath values are accepted."
                },
                "homeTypes": {
                  "type": "array",
                  "maxItems": 7,
                  "items": {
                    "type": "string",
                    "enum": [
                      "houses",
                      "townhomes",
                      "multifamily",
                      "condos",
                      "land",
                      "apartments",
                      "manufactured"
                    ],
                    "description": "Home Types item filter for Real Estate Listing Search. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                  },
                  "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded."
                },
                "propertyType": {
                  "type": "string",
                  "enum": [
                    "apartments",
                    "houses",
                    "townhomes",
                    "condos"
                  ],
                  "description": "Rental property type used by the Apartments-backed provider."
                },
                "bedrooms": {
                  "oneOf": [
                    {
                      "type": "string",
                      "enum": [
                        "any",
                        "studio",
                        "1",
                        "2",
                        "3",
                        "4",
                        "5+"
                      ]
                    },
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 5
                    }
                  ],
                  "description": "Rental bedroom filter used by the Apartments-backed provider."
                },
                "sortBy": {
                  "type": "string",
                  "enum": [
                    "newest",
                    "relevance",
                    "pricea",
                    "priced",
                    "beds",
                    "baths",
                    "size",
                    "lot",
                    "zest"
                  ],
                  "default": "newest",
                  "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters."
                },
                "daysOnMarket": {
                  "type": "string",
                  "enum": [
                    "",
                    "1",
                    "7",
                    "14",
                    "30",
                    "90",
                    "6m",
                    "12m",
                    "24m",
                    "36m"
                  ],
                  "default": "",
                  "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set."
                },
                "sqftMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set."
                },
                "sqftMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set."
                },
                "lotSizeMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set."
                },
                "lotSizeMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set."
                },
                "yearBuiltMin": {
                  "type": "integer",
                  "minimum": 1800,
                  "maximum": 2030,
                  "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set."
                },
                "yearBuiltMax": {
                  "type": "integer",
                  "minimum": 1800,
                  "maximum": 2030,
                  "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set."
                },
                "amenities": {
                  "type": "array",
                  "maxItems": 7,
                  "items": {
                    "type": "string",
                    "enum": [
                      "pool",
                      "ac",
                      "waterfront",
                      "single-story",
                      "garage",
                      "basement",
                      "3d-tour"
                    ],
                    "description": "Amenities item filter for Real Estate Listing Search. Accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\". Constraints: accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\"."
                  },
                  "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields."
                },
                "searchUrls": {
                  "type": "array",
                  "maxItems": 3,
                  "items": {
                    "type": "string",
                    "format": "uri",
                    "description": "Search Urls item value for Real Estate Listing Search. Constraints: format: uri."
                  },
                  "description": "Listing or search URLs for url mode."
                },
                "addresses": {
                  "type": "array",
                  "maxItems": 10,
                  "items": {
                    "type": "string",
                    "description": "Addresses item value for Real Estate Listing Search."
                  },
                  "description": "Addresses for lookup mode."
                },
                "zpids": {
                  "type": "array",
                  "maxItems": 10,
                  "items": {
                    "type": "string",
                    "description": "Zpids item value for Real Estate Listing Search."
                  },
                  "description": "Zillow property ids for lookup mode."
                },
                "propertyIds": {
                  "type": "array",
                  "maxItems": 10,
                  "items": {
                    "type": "string",
                    "description": "Property Ids item value for Real Estate Listing Search."
                  },
                  "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider."
                },
                "locationSlug": {
                  "type": "string",
                  "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
                },
                "state": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "description": "Two-letter state hint for rental searches."
                },
                "zipCode": {
                  "type": "string",
                  "pattern": "^\\d{5}$",
                  "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
                },
                "maxRent": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches."
                },
                "petFriendly": {
                  "type": "boolean",
                  "default": false,
                  "description": "Rental search filter for pet-friendly listings."
                },
                "maxPages": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 2,
                  "default": 1,
                  "description": "Maximum rendered search pages for the Apartments-backed provider."
                },
                "filterToRequestedCity": {
                  "type": "boolean",
                  "description": "Optional exact-city filter for Apartments-backed city searches."
                },
                "includeSchools": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include school data where the selected provider supports detail extraction."
                },
                "includeHistory": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include price/tax history where the selected provider supports detail extraction."
                },
                "includeDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows."
                },
                "smartScrape": {
                  "type": "boolean",
                  "default": false,
                  "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set."
                },
                "maxResults": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 10,
                  "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "result_count",
                "results",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "result_count": {
                  "type": "integer"
                },
                "filter_summary": {
                  "type": "object",
                  "description": "Counts before and after AgentBodega rechecks the requested filters against normalized rows.",
                  "properties": {
                    "normalized_count": {
                      "type": "integer"
                    },
                    "matched_count": {
                      "type": "integer"
                    },
                    "returned_count": {
                      "type": "integer"
                    },
                    "excluded_count": {
                      "type": "integer"
                    }
                  },
                  "additionalProperties": false
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "source",
                      "listing_id",
                      "address"
                    ],
                    "properties": {
                      "source": {
                        "type": "string",
                        "description": "Managed source class used to normalize the listing."
                      },
                      "listing_id": {
                        "type": "string"
                      },
                      "address": {
                        "type": "string"
                      },
                      "street": {
                        "type": "string"
                      },
                      "city": {
                        "type": "string"
                      },
                      "state": {
                        "type": "string"
                      },
                      "postal_code": {
                        "type": "string"
                      },
                      "latitude": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "longitude": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_display": {
                        "type": "string"
                      },
                      "zestimate_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "rent_zestimate_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "tax_assessed_value_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "beds": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "baths": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "lot_sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "year_built": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "home_type": {
                        "type": "string"
                      },
                      "listing_status": {
                        "type": "string"
                      },
                      "days_on_market": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "description": {
                        "type": "string"
                      },
                      "listing_url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "image_url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "photo_urls": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "uri"
                        }
                      },
                      "agent": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "price_history": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "tax_history": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "warnings": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "source": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.05"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.05",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/real-estate/listings/search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.05"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/real-estate/listings/search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "real-estate",
        "kind": "real-estate-tool",
        "taxonomy": {
          "departmentId": "real-estate",
          "department": "Real Estate",
          "aisleId": "listing-search",
          "aisle": "Listing Search",
          "shelfId": "homes-and-rentals",
          "shelf": "Homes And Rentals",
          "offeringId": "real-estate-listings-search",
          "offering": "Real Estate Listing Search",
          "pathIds": [
            "real-estate",
            "listing-search",
            "homes-and-rentals",
            "real-estate-listings-search"
          ],
          "pathLabels": [
            "Real Estate",
            "Listing Search",
            "Homes And Rentals",
            "Real Estate Listing Search"
          ],
          "taxonomyPath": "real-estate.listing-search.homes-and-rentals.real-estate-listings-search",
          "layout": {
            "department": {
              "id": "real-estate",
              "name": "Real Estate"
            },
            "aisle": {
              "id": "listing-search",
              "name": "Listing Search"
            },
            "shelf": {
              "id": "homes-and-rentals",
              "name": "Homes And Rentals"
            },
            "offering": {
              "id": "real-estate-listings-search",
              "name": "Real Estate Listing Search"
            },
            "pathIds": [
              "real-estate",
              "listing-search",
              "homes-and-rentals",
              "real-estate-listings-search"
            ],
            "pathLabels": [
              "Real Estate",
              "Listing Search",
              "Homes And Rentals",
              "Real Estate Listing Search"
            ]
          }
        },
        "description": {
          "short": "Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.",
          "full": "Purpose: Search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nBest use: Use this when an agent needs search current public home and rental listings by city, neighborhood, exact ZIP, listing type, price range, bedroom range, bathroom range, square footage, amenities, URL, address, or property id. Search mode requires market or zipCode; URL mode requires searchUrls; lookup mode requires addresses, zpids, or propertyIds. Advertised filters are rechecked against normalized rows before results are returned.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.\nOptional fields: source, mode, market, listingType, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, homeTypes, propertyType, bedrooms, sortBy, daysOnMarket, sqftMin, sqftMax, lotSizeMin, lotSizeMax, yearBuiltMin, yearBuiltMax, amenities, searchUrls, addresses, zpids, propertyIds, locationSlug, state, zipCode, maxRent, petFriendly, maxPages, filterToRequestedCity, includeSchools, includeHistory, includeDetails, smartScrape, maxResults.\n\nAccepted fields:\n- source (optional, string): Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments. Constraints: accepted values: \"auto\", \"zillow\", \"apartments\", \"realtor\"; default: \"auto\".\n- mode (optional, string): Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids. Constraints: accepted values: \"search\", \"url\", \"lookup\"; default: \"search\".\n- market (optional, string): City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required.\n- listingType (optional, string): Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages. Constraints: accepted values: \"for_sale\", \"recently_sold\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- priceMin (optional, integer): Minimum listing price or monthly rent in USD. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Half-bath values are accepted. Constraints: min: 0; max: 10.\n- homeTypes (optional, array): Allowed home types. Returned rows without a verifiable matching normalized home type are excluded. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used by the Apartments-backed provider. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used by the Apartments-backed provider.\n- sortBy (optional, string): Managed-source collection order before AgentBodega normalizes and rechecks the requested filters. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- sqftMin (optional, integer): Minimum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Rows without verifiable square footage are excluded when set. Constraints: min: 0.\n- lotSizeMin (optional, integer): Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- lotSizeMax (optional, integer): Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set. Constraints: min: 0.\n- yearBuiltMin (optional, integer): Earliest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- yearBuiltMax (optional, integer): Latest accepted construction year. Rows without a verifiable year built are excluded when set. Constraints: min: 1800; max: 2030.\n- amenities (optional, array): Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields. Constraints: max items: 7.\n- searchUrls (optional, array): Listing or search URLs for url mode. Constraints: max items: 3.\n- addresses (optional, array): Addresses for lookup mode. Constraints: max items: 10.\n- zpids (optional, array): Zillow property ids for lookup mode. Constraints: max items: 10.\n- propertyIds (optional, array): Provider property ids for lookup mode, currently used by the realtor-backed provider. Constraints: max items: 10.\n- locationSlug (optional, string): Provider-specific location slug for rental searches when city/state parsing is not enough.\n- state (optional, string): Two-letter state hint for rental searches. Constraints: min length: 2; max length: 2.\n- zipCode (optional, string): Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values.\n- maxRent (optional, integer): Maximum monthly rent. If omitted, priceMax is reused for rental searches. Constraints: min: 0.\n- petFriendly (optional, boolean): Rental search filter for pet-friendly listings. Constraints: default: false.\n- maxPages (optional, integer): Maximum rendered search pages for the Apartments-backed provider. Constraints: default: 1; min: 1; max: 2.\n- filterToRequestedCity (optional, boolean): Optional exact-city filter for Apartments-backed city searches.\n- includeSchools (optional, boolean): Include school data where the selected provider supports detail extraction. Constraints: default: true.\n- includeHistory (optional, boolean): Include price/tax history where the selected provider supports detail extraction. Constraints: default: true.\n- includeDetails (optional, boolean): Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows. Constraints: default: false.\n- smartScrape (optional, boolean): Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set. Constraints: default: false.\n- maxResults (optional, integer): Maximum listing rows to return. Detail-enriched calls are capped at 10 rows. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"source\": \"zillow\",\n  \"mode\": \"search\",\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"priceMin\": 200000,\n  \"priceMax\": 500000,\n  \"bedsMin\": 3,\n  \"bedsMax\": 4,\n  \"bathsMin\": 2,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1400,\n  \"sqftMax\": 3000,\n  \"homeTypes\": [\n    \"houses\",\n    \"townhomes\"\n  ],\n  \"includeDetails\": false,\n  \"maxResults\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "description": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.",
          "anyOf": [
            {
              "title": "Market search",
              "properties": {
                "mode": {
                  "const": "search"
                }
              },
              "anyOf": [
                {
                  "required": [
                    "market"
                  ]
                },
                {
                  "required": [
                    "zipCode"
                  ]
                }
              ]
            },
            {
              "title": "URL search",
              "properties": {
                "mode": {
                  "const": "url"
                }
              },
              "required": [
                "searchUrls"
              ]
            },
            {
              "title": "Property lookup",
              "properties": {
                "mode": {
                  "const": "lookup"
                }
              },
              "anyOf": [
                {
                  "required": [
                    "addresses"
                  ]
                },
                {
                  "required": [
                    "zpids"
                  ]
                },
                {
                  "required": [
                    "propertyIds"
                  ]
                }
              ]
            }
          ],
          "properties": {
            "source": {
              "type": "string",
              "enum": [
                "auto",
                "zillow",
                "apartments",
                "realtor"
              ],
              "default": "auto",
              "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments."
            },
            "mode": {
              "type": "string",
              "enum": [
                "search",
                "url",
                "lookup"
              ],
              "default": "search",
              "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids."
            },
            "market": {
              "type": "string",
              "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "recently_sold",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price or monthly rent in USD."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Half-bath values are accepted."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Half-bath values are accepted."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Listing Search. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used by the Apartments-backed provider."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used by the Apartments-backed provider."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set."
            },
            "lotSizeMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set."
            },
            "lotSizeMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set."
            },
            "yearBuiltMin": {
              "type": "integer",
              "minimum": 1800,
              "maximum": 2030,
              "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set."
            },
            "yearBuiltMax": {
              "type": "integer",
              "minimum": 1800,
              "maximum": 2030,
              "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set."
            },
            "amenities": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "pool",
                  "ac",
                  "waterfront",
                  "single-story",
                  "garage",
                  "basement",
                  "3d-tour"
                ],
                "description": "Amenities item filter for Real Estate Listing Search. Accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\". Constraints: accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\"."
              },
              "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields."
            },
            "searchUrls": {
              "type": "array",
              "maxItems": 3,
              "items": {
                "type": "string",
                "format": "uri",
                "description": "Search Urls item value for Real Estate Listing Search. Constraints: format: uri."
              },
              "description": "Listing or search URLs for url mode."
            },
            "addresses": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Addresses item value for Real Estate Listing Search."
              },
              "description": "Addresses for lookup mode."
            },
            "zpids": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Zpids item value for Real Estate Listing Search."
              },
              "description": "Zillow property ids for lookup mode."
            },
            "propertyIds": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Property Ids item value for Real Estate Listing Search."
              },
              "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider."
            },
            "locationSlug": {
              "type": "string",
              "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
            },
            "state": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2,
              "description": "Two-letter state hint for rental searches."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches."
            },
            "petFriendly": {
              "type": "boolean",
              "default": false,
              "description": "Rental search filter for pet-friendly listings."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered search pages for the Apartments-backed provider."
            },
            "filterToRequestedCity": {
              "type": "boolean",
              "description": "Optional exact-city filter for Apartments-backed city searches."
            },
            "includeSchools": {
              "type": "boolean",
              "default": true,
              "description": "Include school data where the selected provider supports detail extraction."
            },
            "includeHistory": {
              "type": "boolean",
              "default": true,
              "description": "Include price/tax history where the selected provider supports detail extraction."
            },
            "includeDetails": {
              "type": "boolean",
              "default": false,
              "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows."
            },
            "smartScrape": {
              "type": "boolean",
              "default": false,
              "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "description": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned.",
          "anyOf": [
            {
              "title": "Market search",
              "properties": {
                "mode": {
                  "const": "search"
                }
              },
              "anyOf": [
                {
                  "required": [
                    "market"
                  ]
                },
                {
                  "required": [
                    "zipCode"
                  ]
                }
              ]
            },
            {
              "title": "URL search",
              "properties": {
                "mode": {
                  "const": "url"
                }
              },
              "required": [
                "searchUrls"
              ]
            },
            {
              "title": "Property lookup",
              "properties": {
                "mode": {
                  "const": "lookup"
                }
              },
              "anyOf": [
                {
                  "required": [
                    "addresses"
                  ]
                },
                {
                  "required": [
                    "zpids"
                  ]
                },
                {
                  "required": [
                    "propertyIds"
                  ]
                }
              ]
            }
          ],
          "properties": {
            "source": {
              "type": "string",
              "enum": [
                "auto",
                "zillow",
                "apartments",
                "realtor"
              ],
              "default": "auto",
              "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments."
            },
            "mode": {
              "type": "string",
              "enum": [
                "search",
                "url",
                "lookup"
              ],
              "default": "search",
              "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids."
            },
            "market": {
              "type": "string",
              "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "recently_sold",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price or monthly rent in USD."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Half-bath values are accepted."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Half-bath values are accepted."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Listing Search. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used by the Apartments-backed provider."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used by the Apartments-backed provider."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set."
            },
            "lotSizeMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set."
            },
            "lotSizeMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set."
            },
            "yearBuiltMin": {
              "type": "integer",
              "minimum": 1800,
              "maximum": 2030,
              "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set."
            },
            "yearBuiltMax": {
              "type": "integer",
              "minimum": 1800,
              "maximum": 2030,
              "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set."
            },
            "amenities": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "pool",
                  "ac",
                  "waterfront",
                  "single-story",
                  "garage",
                  "basement",
                  "3d-tour"
                ],
                "description": "Amenities item filter for Real Estate Listing Search. Accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\". Constraints: accepted values: \"pool\", \"ac\", \"waterfront\", \"single-story\", \"garage\", \"basement\", \"3d-tour\"."
              },
              "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields."
            },
            "searchUrls": {
              "type": "array",
              "maxItems": 3,
              "items": {
                "type": "string",
                "format": "uri",
                "description": "Search Urls item value for Real Estate Listing Search. Constraints: format: uri."
              },
              "description": "Listing or search URLs for url mode."
            },
            "addresses": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Addresses item value for Real Estate Listing Search."
              },
              "description": "Addresses for lookup mode."
            },
            "zpids": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Zpids item value for Real Estate Listing Search."
              },
              "description": "Zillow property ids for lookup mode."
            },
            "propertyIds": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "string",
                "description": "Property Ids item value for Real Estate Listing Search."
              },
              "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider."
            },
            "locationSlug": {
              "type": "string",
              "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
            },
            "state": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2,
              "description": "Two-letter state hint for rental searches."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches."
            },
            "petFriendly": {
              "type": "boolean",
              "default": false,
              "description": "Rental search filter for pet-friendly listings."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered search pages for the Apartments-backed provider."
            },
            "filterToRequestedCity": {
              "type": "boolean",
              "description": "Optional exact-city filter for Apartments-backed city searches."
            },
            "includeSchools": {
              "type": "boolean",
              "default": true,
              "description": "Include school data where the selected provider supports detail extraction."
            },
            "includeHistory": {
              "type": "boolean",
              "default": true,
              "description": "Include price/tax history where the selected provider supports detail extraction."
            },
            "includeDetails": {
              "type": "boolean",
              "default": false,
              "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows."
            },
            "smartScrape": {
              "type": "boolean",
              "default": false,
              "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "source",
            "mode",
            "market",
            "listingType",
            "priceMin",
            "priceMax",
            "bedsMin",
            "bedsMax",
            "bathsMin",
            "bathsMax",
            "homeTypes",
            "propertyType",
            "bedrooms",
            "sortBy",
            "daysOnMarket",
            "sqftMin",
            "sqftMax",
            "lotSizeMin",
            "lotSizeMax",
            "yearBuiltMin",
            "yearBuiltMax",
            "amenities",
            "searchUrls",
            "addresses",
            "zpids",
            "propertyIds",
            "locationSlug",
            "state",
            "zipCode",
            "maxRent",
            "petFriendly",
            "maxPages",
            "filterToRequestedCity",
            "includeSchools",
            "includeHistory",
            "includeDetails",
            "smartScrape",
            "maxResults"
          ],
          "fields": [
            {
              "name": "source",
              "type": "string",
              "required": false,
              "description": "Optional source preference. auto routes broad home search to Zillow and apartment rental search to Apartments.",
              "constraints": {
                "enum": [
                  "auto",
                  "zillow",
                  "apartments",
                  "realtor"
                ],
                "default": "auto"
              }
            },
            {
              "name": "mode",
              "type": "string",
              "required": false,
              "description": "Search by market, use one or more listing/search URLs, or look up specific addresses/provider property ids.",
              "constraints": {
                "enum": [
                  "search",
                  "url",
                  "lookup"
                ],
                "default": "search"
              }
            },
            {
              "name": "market",
              "type": "string",
              "required": false,
              "description": "City, ZIP, or neighborhood, such as Houston, TX 77008 or Montrose Houston TX. Use zipCode when an exact five-digit postal-code match is required."
            },
            {
              "name": "listingType",
              "type": "string",
              "required": false,
              "description": "Listing inventory to search. recently_sold is available only on providers that expose current sold-result pages.",
              "constraints": {
                "enum": [
                  "for_sale",
                  "recently_sold",
                  "for_rent",
                  "foreclosure"
                ],
                "default": "for_sale"
              }
            },
            {
              "name": "priceMin",
              "type": "integer",
              "required": false,
              "description": "Minimum listing price or monthly rent in USD.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "priceMax",
              "type": "integer",
              "required": false,
              "description": "Maximum listing price or monthly rent in USD.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "bedsMin",
              "type": "integer",
              "required": false,
              "description": "Minimum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bedsMax",
              "type": "integer",
              "required": false,
              "description": "Maximum bedrooms. Aggregate rental rows qualify when their advertised bedroom range overlaps this boundary.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMin",
              "type": "number",
              "required": false,
              "description": "Minimum bathrooms. Half-bath values are accepted.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMax",
              "type": "number",
              "required": false,
              "description": "Maximum bathrooms. Half-bath values are accepted.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "homeTypes",
              "type": "array",
              "required": false,
              "description": "Allowed home types. Returned rows without a verifiable matching normalized home type are excluded.",
              "constraints": {
                "maxItems": 7
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "propertyType",
              "type": "string",
              "required": false,
              "description": "Rental property type used by the Apartments-backed provider.",
              "constraints": {
                "enum": [
                  "apartments",
                  "houses",
                  "townhomes",
                  "condos"
                ]
              }
            },
            {
              "name": "bedrooms",
              "type": "any",
              "required": false,
              "description": "Rental bedroom filter used by the Apartments-backed provider."
            },
            {
              "name": "sortBy",
              "type": "string",
              "required": false,
              "description": "Managed-source collection order before AgentBodega normalizes and rechecks the requested filters.",
              "constraints": {
                "enum": [
                  "newest",
                  "relevance",
                  "pricea",
                  "priced",
                  "beds",
                  "baths",
                  "size",
                  "lot",
                  "zest"
                ],
                "default": "newest"
              }
            },
            {
              "name": "daysOnMarket",
              "type": "string",
              "required": false,
              "description": "Maximum listing-age bucket. Returned rows without a verifiable days-on-market value are excluded when set.",
              "constraints": {
                "enum": [
                  "",
                  "1",
                  "7",
                  "14",
                  "30",
                  "90",
                  "6m",
                  "12m",
                  "24m",
                  "36m"
                ],
                "default": ""
              }
            },
            {
              "name": "sqftMin",
              "type": "integer",
              "required": false,
              "description": "Minimum interior square feet. Rows without verifiable square footage are excluded when set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "sqftMax",
              "type": "integer",
              "required": false,
              "description": "Maximum interior square feet. Rows without verifiable square footage are excluded when set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "lotSizeMin",
              "type": "integer",
              "required": false,
              "description": "Minimum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "lotSizeMax",
              "type": "integer",
              "required": false,
              "description": "Maximum lot size in square feet. Rows without a verifiable lot size are excluded when set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "yearBuiltMin",
              "type": "integer",
              "required": false,
              "description": "Earliest accepted construction year. Rows without a verifiable year built are excluded when set.",
              "constraints": {
                "minimum": 1800,
                "maximum": 2030
              }
            },
            {
              "name": "yearBuiltMax",
              "type": "integer",
              "required": false,
              "description": "Latest accepted construction year. Rows without a verifiable year built are excluded when set.",
              "constraints": {
                "minimum": 1800,
                "maximum": 2030
              }
            },
            {
              "name": "amenities",
              "type": "array",
              "required": false,
              "description": "Requested amenity filters sent to providers that expose them. Availability depends on the selected source's public listing fields.",
              "constraints": {
                "maxItems": 7
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "searchUrls",
              "type": "array",
              "required": false,
              "description": "Listing or search URLs for url mode.",
              "constraints": {
                "maxItems": 3
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "addresses",
              "type": "array",
              "required": false,
              "description": "Addresses for lookup mode.",
              "constraints": {
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "zpids",
              "type": "array",
              "required": false,
              "description": "Zillow property ids for lookup mode.",
              "constraints": {
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "propertyIds",
              "type": "array",
              "required": false,
              "description": "Provider property ids for lookup mode, currently used by the realtor-backed provider.",
              "constraints": {
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "locationSlug",
              "type": "string",
              "required": false,
              "description": "Provider-specific location slug for rental searches when city/state parsing is not enough."
            },
            {
              "name": "state",
              "type": "string",
              "required": false,
              "description": "Two-letter state hint for rental searches.",
              "constraints": {
                "minLength": 2,
                "maxLength": 2
              }
            },
            {
              "name": "zipCode",
              "type": "string",
              "required": false,
              "description": "Exact five-digit ZIP filter for search mode. It narrows collection where supported and is always rechecked against normalized postal_code values."
            },
            {
              "name": "maxRent",
              "type": "integer",
              "required": false,
              "description": "Maximum monthly rent. If omitted, priceMax is reused for rental searches.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "petFriendly",
              "type": "boolean",
              "required": false,
              "description": "Rental search filter for pet-friendly listings.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "maxPages",
              "type": "integer",
              "required": false,
              "description": "Maximum rendered search pages for the Apartments-backed provider.",
              "constraints": {
                "default": 1,
                "minimum": 1,
                "maximum": 2
              }
            },
            {
              "name": "filterToRequestedCity",
              "type": "boolean",
              "required": false,
              "description": "Optional exact-city filter for Apartments-backed city searches."
            },
            {
              "name": "includeSchools",
              "type": "boolean",
              "required": false,
              "description": "Include school data where the selected provider supports detail extraction.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeHistory",
              "type": "boolean",
              "required": false,
              "description": "Include price/tax history where the selected provider supports detail extraction.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeDetails",
              "type": "boolean",
              "required": false,
              "description": "Fetch detail-page fields such as description, agent/broker fields, photos, price history, and tax history. Detail-enriched calls are capped at 10 rows.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "smartScrape",
              "type": "boolean",
              "required": false,
              "description": "Opt into incremental ingestion by skipping listings already seen by the managed adapter. Leave false for a complete current search result set.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "maxResults",
              "type": "integer",
              "required": false,
              "description": "Maximum listing rows to return. Detail-enriched calls are capped at 10 rows.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 20
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "source": "zillow",
            "mode": "search",
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "listingType": "for_sale",
            "priceMin": 200000,
            "priceMax": 500000,
            "bedsMin": 3,
            "bedsMax": 4,
            "bathsMin": 2,
            "bathsMax": 4,
            "sqftMin": 1400,
            "sqftMax": 3000,
            "homeTypes": [
              "houses",
              "townhomes"
            ],
            "includeDetails": false,
            "maxResults": 10
          },
          "requirements": "Choose one mode and provide its required selector: search requires market or zipCode; url requires searchUrls; lookup requires addresses, zpids, or propertyIds. Search filters are rechecked against normalized rows before results are returned."
        },
        "exampleRequest": {
          "source": "zillow",
          "mode": "search",
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "priceMin": 200000,
          "priceMax": 500000,
          "bedsMin": 3,
          "bedsMax": 4,
          "bathsMin": 2,
          "bathsMax": 4,
          "sqftMin": 1400,
          "sqftMax": 3000,
          "homeTypes": [
            "houses",
            "townhomes"
          ],
          "includeDetails": false,
          "maxResults": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "result_count",
            "results",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "result_count": {
              "type": "integer"
            },
            "filter_summary": {
              "type": "object",
              "description": "Counts before and after AgentBodega rechecks the requested filters against normalized rows.",
              "properties": {
                "normalized_count": {
                  "type": "integer"
                },
                "matched_count": {
                  "type": "integer"
                },
                "returned_count": {
                  "type": "integer"
                },
                "excluded_count": {
                  "type": "integer"
                }
              },
              "additionalProperties": false
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "source",
                  "listing_id",
                  "address"
                ],
                "properties": {
                  "source": {
                    "type": "string",
                    "description": "Managed source class used to normalize the listing."
                  },
                  "listing_id": {
                    "type": "string"
                  },
                  "address": {
                    "type": "string"
                  },
                  "street": {
                    "type": "string"
                  },
                  "city": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  },
                  "postal_code": {
                    "type": "string"
                  },
                  "latitude": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "longitude": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "price_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "price_display": {
                    "type": "string"
                  },
                  "zestimate_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "rent_zestimate_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "tax_assessed_value_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "beds": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "baths": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "sqft": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "lot_sqft": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "year_built": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "home_type": {
                    "type": "string"
                  },
                  "listing_status": {
                    "type": "string"
                  },
                  "days_on_market": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "description": {
                    "type": "string"
                  },
                  "listing_url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "image_url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "photo_urls": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uri"
                    }
                  },
                  "agent": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "price_history": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "tax_history": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "warnings": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "additionalProperties": true
              }
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "result_count",
            "results",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "result_count": {
              "type": "integer"
            },
            "filter_summary": {
              "type": "object",
              "description": "Counts before and after AgentBodega rechecks the requested filters against normalized rows.",
              "properties": {
                "normalized_count": {
                  "type": "integer"
                },
                "matched_count": {
                  "type": "integer"
                },
                "returned_count": {
                  "type": "integer"
                },
                "excluded_count": {
                  "type": "integer"
                }
              },
              "additionalProperties": false
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "source",
                  "listing_id",
                  "address"
                ],
                "properties": {
                  "source": {
                    "type": "string",
                    "description": "Managed source class used to normalize the listing."
                  },
                  "listing_id": {
                    "type": "string"
                  },
                  "address": {
                    "type": "string"
                  },
                  "street": {
                    "type": "string"
                  },
                  "city": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  },
                  "postal_code": {
                    "type": "string"
                  },
                  "latitude": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "longitude": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "price_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "price_display": {
                    "type": "string"
                  },
                  "zestimate_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "rent_zestimate_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "tax_assessed_value_usd": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "beds": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "baths": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "sqft": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "lot_sqft": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "year_built": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "home_type": {
                    "type": "string"
                  },
                  "listing_status": {
                    "type": "string"
                  },
                  "days_on_market": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "description": {
                    "type": "string"
                  },
                  "listing_url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "image_url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "photo_urls": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uri"
                    }
                  },
                  "agent": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "price_history": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "tax_history": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "warnings": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "additionalProperties": true
              }
            },
            "source": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "real-estate-listings-search",
            "name": "Real Estate Listing Search",
            "department": "Real Estate"
          },
          "requested": {
            "source": "zillow",
            "mode": "search",
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "listingType": "for_sale",
            "filters": {
              "zipCode": "77008",
              "priceMin": 200000,
              "priceMax": 500000,
              "bedsMin": 3,
              "bedsMax": 4,
              "bathsMin": 2,
              "bathsMax": 4,
              "sqftMin": 1400,
              "sqftMax": 3000
            },
            "maxResults": 10,
            "includeDetails": false
          },
          "source": {
            "selected": "zillow",
            "routing": "managed-adapter",
            "resultFreshness": "live-run",
            "upstreamDetailsDisclosed": false
          },
          "result_count": 1,
          "filter_summary": {
            "normalized_count": 2,
            "matched_count": 1,
            "returned_count": 1,
            "excluded_count": 1
          },
          "results": [
            {
              "source": "zillow",
              "listing_id": "84007409",
              "address": "1328 W 23rd St Unit A, Houston, TX 77008",
              "price_usd": 450000,
              "beds": 3,
              "baths": 4,
              "sqft": 2043
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/real-estate/intelligence",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Real Estate Market Intelligence Report",
      "description": "Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.",
      "longDescription": "Purpose: Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nBest use: Use this when an agent needs turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nPrice: $0.75 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```",
      "category": "real-estate",
      "kind": "real-estate-report",
      "departmentId": "real-estate",
      "department": "Real Estate",
      "aisleId": "market-intelligence",
      "aisle": "Market Intelligence",
      "shelfId": "market-reports",
      "shelf": "Market Reports",
      "offeringId": "real-estate-market-intelligence",
      "offering": "Real Estate Market Intelligence Report",
      "pathIds": [
        "real-estate",
        "market-intelligence",
        "market-reports",
        "real-estate-market-intelligence"
      ],
      "pathLabels": [
        "Real Estate",
        "Market Intelligence",
        "Market Reports",
        "Real Estate Market Intelligence Report"
      ],
      "taxonomyPath": "real-estate.market-intelligence.market-reports.real-estate-market-intelligence",
      "layout": {
        "department": {
          "id": "real-estate",
          "name": "Real Estate"
        },
        "aisle": {
          "id": "market-intelligence",
          "name": "Market Intelligence"
        },
        "shelf": {
          "id": "market-reports",
          "name": "Market Reports"
        },
        "offering": {
          "id": "real-estate-market-intelligence",
          "name": "Real Estate Market Intelligence Report"
        },
        "pathIds": [
          "real-estate",
          "market-intelligence",
          "market-reports",
          "real-estate-market-intelligence"
        ],
        "pathLabels": [
          "Real Estate",
          "Market Intelligence",
          "Market Reports",
          "Real Estate Market Intelligence Report"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "real-estate",
        "market-intelligence",
        "market-report",
        "listing-analysis",
        "pricing-benchmarks",
        "price-bands",
        "decision-lenses",
        "value-shortlist",
        "housing",
        "for-sale",
        "for-rent",
        "public-data",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "750000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "750000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "anyOf": [
          {
            "required": [
              "market"
            ]
          },
          {
            "required": [
              "zipCode"
            ]
          }
        ],
        "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
        "properties": {
          "market": {
            "type": "string",
            "minLength": 2,
            "maxLength": 180,
            "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
          },
          "zipCode": {
            "type": "string",
            "pattern": "^\\d{5}$",
            "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
          },
          "listingType": {
            "type": "string",
            "enum": [
              "for_sale",
              "for_rent",
              "foreclosure"
            ],
            "default": "for_sale",
            "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
          },
          "objective": {
            "type": "string",
            "enum": [
              "balanced",
              "value",
              "low-price",
              "newest",
              "space"
            ],
            "default": "balanced",
            "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
          },
          "priceMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
          },
          "priceMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
          },
          "bedsMin": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
          },
          "bedsMax": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
          },
          "bathsMin": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
          },
          "bathsMax": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
          },
          "sqftMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
          },
          "sqftMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
          },
          "homeTypes": {
            "type": "array",
            "maxItems": 7,
            "items": {
              "type": "string",
              "enum": [
                "houses",
                "townhomes",
                "multifamily",
                "condos",
                "land",
                "apartments",
                "manufactured"
              ],
              "description": "Home Types item filter for Real Estate Market Intelligence Report. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
            },
            "description": "Optional home-type filters for home-sale searches."
          },
          "propertyType": {
            "type": "string",
            "enum": [
              "apartments",
              "houses",
              "townhomes",
              "condos"
            ],
            "description": "Rental property type used for apartment-market reports."
          },
          "bedrooms": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "any",
                  "studio",
                  "1",
                  "2",
                  "3",
                  "4",
                  "5+"
                ]
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 5
              }
            ],
            "description": "Rental bedroom filter used for apartment-market reports."
          },
          "maxRent": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "newest",
              "relevance",
              "pricea",
              "priced",
              "beds",
              "baths",
              "size",
              "lot",
              "zest"
            ],
            "default": "newest",
            "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
          },
          "daysOnMarket": {
            "type": "string",
            "enum": [
              "",
              "1",
              "7",
              "14",
              "30",
              "90",
              "6m",
              "12m",
              "24m",
              "36m"
            ],
            "default": "",
            "description": "Optional maximum listing-age bucket supported by home-sale searches."
          },
          "maxPages": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2,
            "default": 1,
            "description": "Maximum rendered result pages for apartment-market reports."
          },
          "maxListings": {
            "type": "integer",
            "minimum": 10,
            "maximum": 100,
            "default": 100,
            "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
          },
          "shortlistLimit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 15,
            "default": 10,
            "description": "Maximum ranked listings to include in the shortlist."
          },
          "includeMarkdown": {
            "type": "boolean",
            "default": true,
            "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "market",
          "zipCode",
          "listingType",
          "objective",
          "priceMin",
          "priceMax",
          "bedsMin",
          "bedsMax",
          "bathsMin",
          "bathsMax",
          "sqftMin",
          "sqftMax",
          "homeTypes",
          "propertyType",
          "bedrooms",
          "maxRent",
          "sortBy",
          "daysOnMarket",
          "maxPages",
          "maxListings",
          "shortlistLimit",
          "includeMarkdown"
        ],
        "fields": [
          {
            "name": "market",
            "type": "string",
            "required": false,
            "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
            "constraints": {
              "minLength": 2,
              "maxLength": 180
            }
          },
          {
            "name": "zipCode",
            "type": "string",
            "required": false,
            "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
          },
          {
            "name": "listingType",
            "type": "string",
            "required": false,
            "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
            "constraints": {
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale"
            }
          },
          {
            "name": "objective",
            "type": "string",
            "required": false,
            "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
            "constraints": {
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced"
            }
          },
          {
            "name": "priceMin",
            "type": "integer",
            "required": false,
            "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "priceMax",
            "type": "integer",
            "required": false,
            "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "bedsMin",
            "type": "integer",
            "required": false,
            "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bedsMax",
            "type": "integer",
            "required": false,
            "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMin",
            "type": "number",
            "required": false,
            "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMax",
            "type": "number",
            "required": false,
            "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "sqftMin",
            "type": "integer",
            "required": false,
            "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "sqftMax",
            "type": "integer",
            "required": false,
            "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "homeTypes",
            "type": "array",
            "required": false,
            "description": "Optional home-type filters for home-sale searches.",
            "constraints": {
              "maxItems": 7
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "propertyType",
            "type": "string",
            "required": false,
            "description": "Rental property type used for apartment-market reports.",
            "constraints": {
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ]
            }
          },
          {
            "name": "bedrooms",
            "type": "any",
            "required": false,
            "description": "Rental bedroom filter used for apartment-market reports."
          },
          {
            "name": "maxRent",
            "type": "integer",
            "required": false,
            "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "sortBy",
            "type": "string",
            "required": false,
            "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
            "constraints": {
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest"
            }
          },
          {
            "name": "daysOnMarket",
            "type": "string",
            "required": false,
            "description": "Optional maximum listing-age bucket supported by home-sale searches.",
            "constraints": {
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": ""
            }
          },
          {
            "name": "maxPages",
            "type": "integer",
            "required": false,
            "description": "Maximum rendered result pages for apartment-market reports.",
            "constraints": {
              "default": 1,
              "minimum": 1,
              "maximum": 2
            }
          },
          {
            "name": "maxListings",
            "type": "integer",
            "required": false,
            "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
            "constraints": {
              "default": 100,
              "minimum": 10,
              "maximum": 100
            }
          },
          {
            "name": "shortlistLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum ranked listings to include in the shortlist.",
            "constraints": {
              "default": 10,
              "minimum": 3,
              "maximum": 15
            }
          },
          {
            "name": "includeMarkdown",
            "type": "boolean",
            "required": false,
            "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "objective": "value",
          "priceMin": 200000,
          "priceMax": 750000,
          "bedsMin": 2,
          "bedsMax": 4,
          "bathsMin": 1.5,
          "bathsMax": 4,
          "sqftMin": 1000,
          "sqftMax": 3500,
          "maxListings": 100,
          "shortlistLimit": 10,
          "includeMarkdown": true
        },
        "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
      },
      "exampleRequest": {
        "market": "Houston, TX 77008",
        "zipCode": "77008",
        "listingType": "for_sale",
        "objective": "value",
        "priceMin": 200000,
        "priceMax": 750000,
        "bedsMin": 2,
        "bedsMax": 4,
        "bathsMin": 1.5,
        "bathsMax": 4,
        "sqftMin": 1000,
        "sqftMax": 3500,
        "maxListings": 100,
        "shortlistLimit": 10,
        "includeMarkdown": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "report",
          "listings",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True only when enough evidence was collected to deliver the report."
          },
          "tool": {
            "type": "object",
            "description": "AgentBodega product identity and department.",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "description": "Normalized report request and enforced limits.",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "description": "Source-neutral routing and freshness metadata.",
            "additionalProperties": true
          },
          "report": {
            "type": "object",
            "required": [
              "title",
              "executive_summary",
              "insights",
              "sample",
              "benchmarks",
              "price_bands",
              "market_positions",
              "market_signals",
              "segments",
              "decision_lenses",
              "shortlist",
              "outliers",
              "evidence_manifest",
              "data_quality",
              "methodology"
            ],
            "properties": {
              "title": {
                "type": "string"
              },
              "executive_summary": {
                "type": "string",
                "description": "Deterministic summary grounded in the returned sample metrics."
              },
              "insights": {
                "type": "array",
                "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                "items": {
                  "type": "string"
                }
              },
              "sample": {
                "type": "object",
                "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                "additionalProperties": true
              },
              "benchmarks": {
                "type": "object",
                "required": [
                  "list_price_usd",
                  "square_feet",
                  "price_per_sqft_usd",
                  "days_on_market",
                  "bedrooms"
                ],
                "properties": {
                  "list_price_usd": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "square_feet": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "price_per_sqft_usd": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "days_on_market": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "bedrooms": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              "price_bands": {
                "type": "object",
                "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                "additionalProperties": true
              },
              "market_positions": {
                "type": "object",
                "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                "additionalProperties": true
              },
              "market_signals": {
                "type": "object",
                "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                "additionalProperties": true
              },
              "segments": {
                "type": "object",
                "description": "Inventory groups by home type, postal code, and bedroom count.",
                "additionalProperties": true
              },
              "decision_lenses": {
                "type": "object",
                "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                "additionalProperties": true
              },
              "shortlist": {
                "type": "array",
                "description": "Listings ranked against the requested objective and the current report sample.",
                "items": {
                  "type": "object",
                  "required": [
                    "rank",
                    "score",
                    "listing_id",
                    "address",
                    "price_usd",
                    "reasons"
                  ],
                  "properties": {
                    "rank": {
                      "type": "integer"
                    },
                    "score": {
                      "type": "number"
                    },
                    "listing_id": {
                      "type": "string"
                    },
                    "address": {
                      "type": "string"
                    },
                    "listing_url": {
                      "type": "string"
                    },
                    "price_usd": {
                      "type": "number"
                    },
                    "beds": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "baths": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "sqft": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_per_sqft_usd": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "days_on_market": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_vs_market_pct": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_per_sqft_vs_market_pct": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "cohort": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Context against listings with the same normalized home type and bedroom count.",
                      "additionalProperties": true
                    },
                    "reasons": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "additionalProperties": true
                }
              },
              "outliers": {
                "type": "object",
                "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                "additionalProperties": true
              },
              "evidence_manifest": {
                "type": "object",
                "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                "additionalProperties": true
              },
              "data_quality": {
                "type": "object",
                "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                "additionalProperties": true
              },
              "methodology": {
                "type": "object",
                "description": "Transparent calculation and interpretation boundaries.",
                "additionalProperties": true
              },
              "markdown": {
                "type": "string",
                "description": "Optional ready-to-render report."
              }
            },
            "additionalProperties": true
          },
          "listings": {
            "type": "array",
            "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "real-estate-market-intelligence",
          "name": "Real Estate Market Intelligence Report",
          "department": "Real Estate"
        },
        "requested": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "filters": {
            "zipCode": "77008",
            "priceMin": 200000,
            "priceMax": 750000,
            "bedsMin": 2,
            "bedsMax": 4,
            "bathsMin": 1.5,
            "bathsMax": 4,
            "sqftMin": 1000,
            "sqftMax": 3500
          },
          "inventoryClass": "home-listings",
          "listingType": "for_sale",
          "objective": "value",
          "maxListings": 100,
          "shortlistLimit": 10,
          "evidenceScope": "shortlist-only",
          "includeMarkdown": true,
          "smartScrape": false
        },
        "source": {
          "selected": "managed-public-listings",
          "inventoryClass": "home-listings",
          "routing": "managed-adapter",
          "resultFreshness": "live-run",
          "upstreamDetailsDisclosed": false
        },
        "report": {
          "title": "Houston, TX 77008 Real Estate Market Intelligence",
          "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008. The sample median listing price is $525,000 and the median price per square foot is $248. The value shortlist ranks listings only against this current sample. Data confidence is high.",
          "insights": [
            "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000.",
            "11 of 39 listings with square-footage evidence sit below both sample medians."
          ],
          "sample": {
            "raw_count": 50,
            "duplicate_count": 3,
            "unique_count": 47,
            "eligible_count": 42,
            "excluded_count": 5
          },
          "benchmarks": {
            "list_price_usd": {
              "count": 42,
              "min": 239000,
              "p25": 389000,
              "median": 525000,
              "mean": 548120.24,
              "p75": 675000,
              "max": 750000
            },
            "square_feet": {
              "count": 39,
              "min": 960,
              "p25": 1480,
              "median": 1980,
              "mean": 2051.41,
              "p75": 2440,
              "max": 3890
            },
            "price_per_sqft_usd": {
              "count": 39,
              "min": 174.82,
              "p25": 215.6,
              "median": 248,
              "mean": 252.43,
              "p75": 284.7,
              "max": 342.91
            },
            "days_on_market": {
              "count": 31,
              "min": 1,
              "p25": 7,
              "median": 18,
              "mean": 27.42,
              "p75": 35,
              "max": 103
            },
            "bedrooms": {
              "count": 42,
              "min": 2,
              "p25": 3,
              "median": 3,
              "mean": 3.29,
              "p75": 4,
              "max": 6
            }
          },
          "price_bands": {
            "basis": "current sample list price quartiles",
            "observed_count": 42,
            "bands": [
              {
                "id": "under-p25",
                "label": "Lower quartile",
                "count": 11,
                "share_pct": 26.2,
                "lower_usd": null,
                "upper_usd": 389000
              }
            ]
          },
          "market_positions": {
            "basis": {
              "median_price_usd": 525000,
              "median_price_per_sqft_usd": 248
            },
            "observed_count": 39,
            "positions": [
              {
                "id": "relative-value",
                "label": "Below both medians",
                "count": 11,
                "share_pct": 28.2
              }
            ]
          },
          "market_signals": {
            "below_median_price": {
              "count": 21,
              "share_pct": 50
            },
            "below_both_price_medians": {
              "count": 11,
              "share_pct": 28.2,
              "observed_count": 39
            },
            "fresh_7_days_or_less": {
              "count": 8,
              "share_pct": 25.8,
              "observed_count": 31
            }
          },
          "segments": {
            "by_home_type": [
              {
                "label": "SINGLE_FAMILY",
                "count": 28,
                "median_price_usd": 549500,
                "median_price_per_sqft_usd": 251.2
              }
            ],
            "by_postal_code": [
              {
                "label": "77008",
                "count": 42,
                "median_price_usd": 525000,
                "median_price_per_sqft_usd": 248
              }
            ],
            "by_bedrooms": [
              {
                "label": "3 bedrooms",
                "count": 24,
                "median_price_usd": 510000,
                "median_price_per_sqft_usd": 246.5
              }
            ]
          },
          "decision_lenses": {
            "balanced": [
              {
                "rank": 1,
                "listing_id": "84007409",
                "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                "price_usd": 450000
              }
            ],
            "value": [
              {
                "rank": 1,
                "listing_id": "84007409",
                "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                "price_usd": 450000
              }
            ]
          },
          "shortlist": [
            {
              "rank": 1,
              "score": 94.2,
              "listing_id": "84007409",
              "address": "1328 W 23rd St Unit A, Houston, TX 77008",
              "listing_url": "https://example.com/listing/84007409",
              "price_usd": 450000,
              "beds": 3,
              "baths": 4,
              "sqft": 2043,
              "price_per_sqft_usd": 220.26,
              "days_on_market": 6,
              "price_vs_market_pct": -14.3,
              "price_per_sqft_vs_market_pct": -11.2,
              "reasons": [
                "14.3% below sample median price",
                "11.2% below sample median price per square foot"
              ]
            }
          ],
          "outliers": {
            "method": "1.5 x interquartile range review flags",
            "interpretation": "Review flags are not valuation claims.",
            "count": 0,
            "listings": []
          },
          "evidence_manifest": {
            "analyzed_listing_count": 42,
            "returned_listing_count": 0,
            "evidence_scope": "shortlist-only",
            "full_listing_rows_included": false,
            "shortlist_count": 10,
            "enforced_max_listing_cap": 100
          },
          "data_quality": {
            "confidence": "high",
            "coverage": {
              "price_pct": 100,
              "address_pct": 100,
              "listing_url_pct": 100,
              "square_feet_pct": 92.9,
              "price_per_sqft_pct": 92.9,
              "days_on_market_pct": 73.8,
              "bedrooms_pct": 100
            },
            "warnings": [
              "Public listing inventory can change after this snapshot and may not include every listing in the market."
            ],
            "limitations": [
              "Current public listing sample, not full MLS coverage."
            ]
          },
          "methodology": {
            "calculation": "Deterministic descriptive statistics with interpolated quartiles and relative within-sample ranking.",
            "ranking_objective": "value",
            "minimum_usable_listings": 5,
            "historical_trends_included": false,
            "appraisal_or_investment_advice": false
          },
          "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nAnalyzed 42 unique current listings."
        },
        "listings": [],
        "checkedAt": "2026-07-14T00:00:00.000Z"
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "objective": "value",
                "priceMin": 200000,
                "priceMax": 750000,
                "bedsMin": 2,
                "bedsMax": 4,
                "bathsMin": 1.5,
                "bathsMax": 4,
                "sqftMin": 1000,
                "sqftMax": 3500,
                "maxListings": 100,
                "shortlistLimit": 10,
                "includeMarkdown": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "real-estate-market-intelligence",
                  "name": "Real Estate Market Intelligence Report",
                  "department": "Real Estate"
                },
                "requested": {
                  "market": "Houston, TX 77008",
                  "zipCode": "77008",
                  "filters": {
                    "zipCode": "77008",
                    "priceMin": 200000,
                    "priceMax": 750000,
                    "bedsMin": 2,
                    "bedsMax": 4,
                    "bathsMin": 1.5,
                    "bathsMax": 4,
                    "sqftMin": 1000,
                    "sqftMax": 3500
                  },
                  "inventoryClass": "home-listings",
                  "listingType": "for_sale",
                  "objective": "value",
                  "maxListings": 100,
                  "shortlistLimit": 10,
                  "evidenceScope": "shortlist-only",
                  "includeMarkdown": true,
                  "smartScrape": false
                },
                "source": {
                  "selected": "managed-public-listings",
                  "inventoryClass": "home-listings",
                  "routing": "managed-adapter",
                  "resultFreshness": "live-run",
                  "upstreamDetailsDisclosed": false
                },
                "report": {
                  "title": "Houston, TX 77008 Real Estate Market Intelligence",
                  "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008. The sample median listing price is $525,000 and the median price per square foot is $248. The value shortlist ranks listings only against this current sample. Data confidence is high.",
                  "insights": [
                    "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000.",
                    "11 of 39 listings with square-footage evidence sit below both sample medians."
                  ],
                  "sample": {
                    "raw_count": 50,
                    "duplicate_count": 3,
                    "unique_count": 47,
                    "eligible_count": 42,
                    "excluded_count": 5
                  },
                  "benchmarks": {
                    "list_price_usd": {
                      "count": 42,
                      "min": 239000,
                      "p25": 389000,
                      "median": 525000,
                      "mean": 548120.24,
                      "p75": 675000,
                      "max": 750000
                    },
                    "square_feet": {
                      "count": 39,
                      "min": 960,
                      "p25": 1480,
                      "median": 1980,
                      "mean": 2051.41,
                      "p75": 2440,
                      "max": 3890
                    },
                    "price_per_sqft_usd": {
                      "count": 39,
                      "min": 174.82,
                      "p25": 215.6,
                      "median": 248,
                      "mean": 252.43,
                      "p75": 284.7,
                      "max": 342.91
                    },
                    "days_on_market": {
                      "count": 31,
                      "min": 1,
                      "p25": 7,
                      "median": 18,
                      "mean": 27.42,
                      "p75": 35,
                      "max": 103
                    },
                    "bedrooms": {
                      "count": 42,
                      "min": 2,
                      "p25": 3,
                      "median": 3,
                      "mean": 3.29,
                      "p75": 4,
                      "max": 6
                    }
                  },
                  "price_bands": {
                    "basis": "current sample list price quartiles",
                    "observed_count": 42,
                    "bands": [
                      {
                        "id": "under-p25",
                        "label": "Lower quartile",
                        "count": 11,
                        "share_pct": 26.2,
                        "lower_usd": null,
                        "upper_usd": 389000
                      }
                    ]
                  },
                  "market_positions": {
                    "basis": {
                      "median_price_usd": 525000,
                      "median_price_per_sqft_usd": 248
                    },
                    "observed_count": 39,
                    "positions": [
                      {
                        "id": "relative-value",
                        "label": "Below both medians",
                        "count": 11,
                        "share_pct": 28.2
                      }
                    ]
                  },
                  "market_signals": {
                    "below_median_price": {
                      "count": 21,
                      "share_pct": 50
                    },
                    "below_both_price_medians": {
                      "count": 11,
                      "share_pct": 28.2,
                      "observed_count": 39
                    },
                    "fresh_7_days_or_less": {
                      "count": 8,
                      "share_pct": 25.8,
                      "observed_count": 31
                    }
                  },
                  "segments": {
                    "by_home_type": [
                      {
                        "label": "SINGLE_FAMILY",
                        "count": 28,
                        "median_price_usd": 549500,
                        "median_price_per_sqft_usd": 251.2
                      }
                    ],
                    "by_postal_code": [
                      {
                        "label": "77008",
                        "count": 42,
                        "median_price_usd": 525000,
                        "median_price_per_sqft_usd": 248
                      }
                    ],
                    "by_bedrooms": [
                      {
                        "label": "3 bedrooms",
                        "count": 24,
                        "median_price_usd": 510000,
                        "median_price_per_sqft_usd": 246.5
                      }
                    ]
                  },
                  "decision_lenses": {
                    "balanced": [
                      {
                        "rank": 1,
                        "listing_id": "84007409",
                        "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                        "price_usd": 450000
                      }
                    ],
                    "value": [
                      {
                        "rank": 1,
                        "listing_id": "84007409",
                        "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                        "price_usd": 450000
                      }
                    ]
                  },
                  "shortlist": [
                    {
                      "rank": 1,
                      "score": 94.2,
                      "listing_id": "84007409",
                      "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                      "listing_url": "https://example.com/listing/84007409",
                      "price_usd": 450000,
                      "beds": 3,
                      "baths": 4,
                      "sqft": 2043,
                      "price_per_sqft_usd": 220.26,
                      "days_on_market": 6,
                      "price_vs_market_pct": -14.3,
                      "price_per_sqft_vs_market_pct": -11.2,
                      "reasons": [
                        "14.3% below sample median price",
                        "11.2% below sample median price per square foot"
                      ]
                    }
                  ],
                  "outliers": {
                    "method": "1.5 x interquartile range review flags",
                    "interpretation": "Review flags are not valuation claims.",
                    "count": 0,
                    "listings": []
                  },
                  "evidence_manifest": {
                    "analyzed_listing_count": 42,
                    "returned_listing_count": 0,
                    "evidence_scope": "shortlist-only",
                    "full_listing_rows_included": false,
                    "shortlist_count": 10,
                    "enforced_max_listing_cap": 100
                  },
                  "data_quality": {
                    "confidence": "high",
                    "coverage": {
                      "price_pct": 100,
                      "address_pct": 100,
                      "listing_url_pct": 100,
                      "square_feet_pct": 92.9,
                      "price_per_sqft_pct": 92.9,
                      "days_on_market_pct": 73.8,
                      "bedrooms_pct": 100
                    },
                    "warnings": [
                      "Public listing inventory can change after this snapshot and may not include every listing in the market."
                    ],
                    "limitations": [
                      "Current public listing sample, not full MLS coverage."
                    ]
                  },
                  "methodology": {
                    "calculation": "Deterministic descriptive statistics with interpolated quartiles and relative within-sample ranking.",
                    "ranking_objective": "value",
                    "minimum_usable_listings": 5,
                    "historical_trends_included": false,
                    "appraisal_or_investment_advice": false
                  },
                  "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nAnalyzed 42 unique current listings."
                },
                "listings": [],
                "checkedAt": "2026-07-14T00:00:00.000Z"
              }
            }
          },
          "routeTemplate": "/api/real-estate/intelligence",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "anyOf": [
                      {
                        "required": [
                          "market"
                        ]
                      },
                      {
                        "required": [
                          "zipCode"
                        ]
                      }
                    ],
                    "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
                    "properties": {
                      "market": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 180,
                        "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
                      },
                      "zipCode": {
                        "type": "string",
                        "pattern": "^\\d{5}$",
                        "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                      },
                      "listingType": {
                        "type": "string",
                        "enum": [
                          "for_sale",
                          "for_rent",
                          "foreclosure"
                        ],
                        "default": "for_sale",
                        "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
                      },
                      "objective": {
                        "type": "string",
                        "enum": [
                          "balanced",
                          "value",
                          "low-price",
                          "newest",
                          "space"
                        ],
                        "default": "balanced",
                        "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
                      },
                      "priceMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
                      },
                      "priceMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
                      },
                      "bedsMin": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                      },
                      "bedsMax": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                      },
                      "bathsMin": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                      },
                      "bathsMax": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                      },
                      "sqftMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                      },
                      "sqftMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                      },
                      "homeTypes": {
                        "type": "array",
                        "maxItems": 7,
                        "items": {
                          "type": "string",
                          "enum": [
                            "houses",
                            "townhomes",
                            "multifamily",
                            "condos",
                            "land",
                            "apartments",
                            "manufactured"
                          ],
                          "description": "Home Types item filter for Real Estate Market Intelligence Report. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                        },
                        "description": "Optional home-type filters for home-sale searches."
                      },
                      "propertyType": {
                        "type": "string",
                        "enum": [
                          "apartments",
                          "houses",
                          "townhomes",
                          "condos"
                        ],
                        "description": "Rental property type used for apartment-market reports."
                      },
                      "bedrooms": {
                        "oneOf": [
                          {
                            "type": "string",
                            "enum": [
                              "any",
                              "studio",
                              "1",
                              "2",
                              "3",
                              "4",
                              "5+"
                            ]
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 5
                          }
                        ],
                        "description": "Rental bedroom filter used for apartment-market reports."
                      },
                      "maxRent": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
                      },
                      "sortBy": {
                        "type": "string",
                        "enum": [
                          "newest",
                          "relevance",
                          "pricea",
                          "priced",
                          "beds",
                          "baths",
                          "size",
                          "lot",
                          "zest"
                        ],
                        "default": "newest",
                        "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
                      },
                      "daysOnMarket": {
                        "type": "string",
                        "enum": [
                          "",
                          "1",
                          "7",
                          "14",
                          "30",
                          "90",
                          "6m",
                          "12m",
                          "24m",
                          "36m"
                        ],
                        "default": "",
                        "description": "Optional maximum listing-age bucket supported by home-sale searches."
                      },
                      "maxPages": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 2,
                        "default": 1,
                        "description": "Maximum rendered result pages for apartment-market reports."
                      },
                      "maxListings": {
                        "type": "integer",
                        "minimum": 10,
                        "maximum": 100,
                        "default": 100,
                        "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
                      },
                      "shortlistLimit": {
                        "type": "integer",
                        "minimum": 3,
                        "maximum": 15,
                        "default": 10,
                        "description": "Maximum ranked listings to include in the shortlist."
                      },
                      "includeMarkdown": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "report",
                      "listings",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True only when enough evidence was collected to deliver the report."
                      },
                      "tool": {
                        "type": "object",
                        "description": "AgentBodega product identity and department.",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "description": "Normalized report request and enforced limits.",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "description": "Source-neutral routing and freshness metadata.",
                        "additionalProperties": true
                      },
                      "report": {
                        "type": "object",
                        "required": [
                          "title",
                          "executive_summary",
                          "insights",
                          "sample",
                          "benchmarks",
                          "price_bands",
                          "market_positions",
                          "market_signals",
                          "segments",
                          "decision_lenses",
                          "shortlist",
                          "outliers",
                          "evidence_manifest",
                          "data_quality",
                          "methodology"
                        ],
                        "properties": {
                          "title": {
                            "type": "string"
                          },
                          "executive_summary": {
                            "type": "string",
                            "description": "Deterministic summary grounded in the returned sample metrics."
                          },
                          "insights": {
                            "type": "array",
                            "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                            "items": {
                              "type": "string"
                            }
                          },
                          "sample": {
                            "type": "object",
                            "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                            "additionalProperties": true
                          },
                          "benchmarks": {
                            "type": "object",
                            "required": [
                              "list_price_usd",
                              "square_feet",
                              "price_per_sqft_usd",
                              "days_on_market",
                              "bedrooms"
                            ],
                            "properties": {
                              "list_price_usd": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "square_feet": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "price_per_sqft_usd": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "days_on_market": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "bedrooms": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              }
                            },
                            "additionalProperties": false
                          },
                          "price_bands": {
                            "type": "object",
                            "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                            "additionalProperties": true
                          },
                          "market_positions": {
                            "type": "object",
                            "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                            "additionalProperties": true
                          },
                          "market_signals": {
                            "type": "object",
                            "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                            "additionalProperties": true
                          },
                          "segments": {
                            "type": "object",
                            "description": "Inventory groups by home type, postal code, and bedroom count.",
                            "additionalProperties": true
                          },
                          "decision_lenses": {
                            "type": "object",
                            "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                            "additionalProperties": true
                          },
                          "shortlist": {
                            "type": "array",
                            "description": "Listings ranked against the requested objective and the current report sample.",
                            "items": {
                              "type": "object",
                              "required": [
                                "rank",
                                "score",
                                "listing_id",
                                "address",
                                "price_usd",
                                "reasons"
                              ],
                              "properties": {
                                "rank": {
                                  "type": "integer"
                                },
                                "score": {
                                  "type": "number"
                                },
                                "listing_id": {
                                  "type": "string"
                                },
                                "address": {
                                  "type": "string"
                                },
                                "listing_url": {
                                  "type": "string"
                                },
                                "price_usd": {
                                  "type": "number"
                                },
                                "beds": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "baths": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "sqft": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_per_sqft_usd": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "days_on_market": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_vs_market_pct": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_per_sqft_vs_market_pct": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "cohort": {
                                  "type": [
                                    "object",
                                    "null"
                                  ],
                                  "description": "Context against listings with the same normalized home type and bedroom count.",
                                  "additionalProperties": true
                                },
                                "reasons": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              },
                              "additionalProperties": true
                            }
                          },
                          "outliers": {
                            "type": "object",
                            "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                            "additionalProperties": true
                          },
                          "evidence_manifest": {
                            "type": "object",
                            "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                            "additionalProperties": true
                          },
                          "data_quality": {
                            "type": "object",
                            "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                            "additionalProperties": true
                          },
                          "methodology": {
                            "type": "object",
                            "description": "Transparent calculation and interpretation boundaries.",
                            "additionalProperties": true
                          },
                          "markdown": {
                            "type": "string",
                            "description": "Optional ready-to-render report."
                          }
                        },
                        "additionalProperties": true
                      },
                      "listings": {
                        "type": "array",
                        "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "real-estate-market-intelligence",
            "url": "https://agentbodega.store/api/real-estate/intelligence",
            "method": "POST",
            "description": "Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.",
            "longDescription": "Purpose: Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nBest use: Use this when an agent needs turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nPrice: $0.75 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Real Estate Market Intelligence Report",
            "category": "real-estate",
            "kind": "real-estate-report",
            "tags": [
              "real-estate",
              "market-intelligence",
              "market-report",
              "listing-analysis",
              "pricing-benchmarks",
              "price-bands",
              "decision-lenses",
              "value-shortlist",
              "housing",
              "for-sale",
              "for-rent",
              "public-data",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "market",
                "zipCode",
                "listingType",
                "objective",
                "priceMin",
                "priceMax",
                "bedsMin",
                "bedsMax",
                "bathsMin",
                "bathsMax",
                "sqftMin",
                "sqftMax",
                "homeTypes",
                "propertyType",
                "bedrooms",
                "maxRent",
                "sortBy",
                "daysOnMarket",
                "maxPages",
                "maxListings",
                "shortlistLimit",
                "includeMarkdown"
              ],
              "fields": [
                {
                  "name": "market",
                  "type": "string",
                  "required": false,
                  "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 180
                  }
                },
                {
                  "name": "zipCode",
                  "type": "string",
                  "required": false,
                  "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                },
                {
                  "name": "listingType",
                  "type": "string",
                  "required": false,
                  "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
                  "constraints": {
                    "enum": [
                      "for_sale",
                      "for_rent",
                      "foreclosure"
                    ],
                    "default": "for_sale"
                  }
                },
                {
                  "name": "objective",
                  "type": "string",
                  "required": false,
                  "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
                  "constraints": {
                    "enum": [
                      "balanced",
                      "value",
                      "low-price",
                      "newest",
                      "space"
                    ],
                    "default": "balanced"
                  }
                },
                {
                  "name": "priceMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "priceMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "bedsMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bedsMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMin",
                  "type": "number",
                  "required": false,
                  "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMax",
                  "type": "number",
                  "required": false,
                  "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "sqftMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "sqftMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "homeTypes",
                  "type": "array",
                  "required": false,
                  "description": "Optional home-type filters for home-sale searches.",
                  "constraints": {
                    "maxItems": 7
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "propertyType",
                  "type": "string",
                  "required": false,
                  "description": "Rental property type used for apartment-market reports.",
                  "constraints": {
                    "enum": [
                      "apartments",
                      "houses",
                      "townhomes",
                      "condos"
                    ]
                  }
                },
                {
                  "name": "bedrooms",
                  "type": "any",
                  "required": false,
                  "description": "Rental bedroom filter used for apartment-market reports."
                },
                {
                  "name": "maxRent",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "sortBy",
                  "type": "string",
                  "required": false,
                  "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
                  "constraints": {
                    "enum": [
                      "newest",
                      "relevance",
                      "pricea",
                      "priced",
                      "beds",
                      "baths",
                      "size",
                      "lot",
                      "zest"
                    ],
                    "default": "newest"
                  }
                },
                {
                  "name": "daysOnMarket",
                  "type": "string",
                  "required": false,
                  "description": "Optional maximum listing-age bucket supported by home-sale searches.",
                  "constraints": {
                    "enum": [
                      "",
                      "1",
                      "7",
                      "14",
                      "30",
                      "90",
                      "6m",
                      "12m",
                      "24m",
                      "36m"
                    ],
                    "default": ""
                  }
                },
                {
                  "name": "maxPages",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum rendered result pages for apartment-market reports.",
                  "constraints": {
                    "default": 1,
                    "minimum": 1,
                    "maximum": 2
                  }
                },
                {
                  "name": "maxListings",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
                  "constraints": {
                    "default": 100,
                    "minimum": 10,
                    "maximum": 100
                  }
                },
                {
                  "name": "shortlistLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum ranked listings to include in the shortlist.",
                  "constraints": {
                    "default": 10,
                    "minimum": 3,
                    "maximum": 15
                  }
                },
                {
                  "name": "includeMarkdown",
                  "type": "boolean",
                  "required": false,
                  "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "objective": "value",
                "priceMin": 200000,
                "priceMax": 750000,
                "bedsMin": 2,
                "bedsMax": 4,
                "bathsMin": 1.5,
                "bathsMax": 4,
                "sqftMin": 1000,
                "sqftMax": 3500,
                "maxListings": 100,
                "shortlistLimit": 10,
                "includeMarkdown": true
              },
              "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
            },
            "inputSchema": {
              "type": "object",
              "anyOf": [
                {
                  "required": [
                    "market"
                  ]
                },
                {
                  "required": [
                    "zipCode"
                  ]
                }
              ],
              "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
              "properties": {
                "market": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 180,
                  "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
                },
                "zipCode": {
                  "type": "string",
                  "pattern": "^\\d{5}$",
                  "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                },
                "listingType": {
                  "type": "string",
                  "enum": [
                    "for_sale",
                    "for_rent",
                    "foreclosure"
                  ],
                  "default": "for_sale",
                  "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
                },
                "objective": {
                  "type": "string",
                  "enum": [
                    "balanced",
                    "value",
                    "low-price",
                    "newest",
                    "space"
                  ],
                  "default": "balanced",
                  "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
                },
                "priceMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
                },
                "priceMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
                },
                "bedsMin": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                },
                "bedsMax": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                },
                "bathsMin": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                },
                "bathsMax": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                },
                "sqftMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                },
                "sqftMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                },
                "homeTypes": {
                  "type": "array",
                  "maxItems": 7,
                  "items": {
                    "type": "string",
                    "enum": [
                      "houses",
                      "townhomes",
                      "multifamily",
                      "condos",
                      "land",
                      "apartments",
                      "manufactured"
                    ],
                    "description": "Home Types item filter for Real Estate Market Intelligence Report. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                  },
                  "description": "Optional home-type filters for home-sale searches."
                },
                "propertyType": {
                  "type": "string",
                  "enum": [
                    "apartments",
                    "houses",
                    "townhomes",
                    "condos"
                  ],
                  "description": "Rental property type used for apartment-market reports."
                },
                "bedrooms": {
                  "oneOf": [
                    {
                      "type": "string",
                      "enum": [
                        "any",
                        "studio",
                        "1",
                        "2",
                        "3",
                        "4",
                        "5+"
                      ]
                    },
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 5
                    }
                  ],
                  "description": "Rental bedroom filter used for apartment-market reports."
                },
                "maxRent": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
                },
                "sortBy": {
                  "type": "string",
                  "enum": [
                    "newest",
                    "relevance",
                    "pricea",
                    "priced",
                    "beds",
                    "baths",
                    "size",
                    "lot",
                    "zest"
                  ],
                  "default": "newest",
                  "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
                },
                "daysOnMarket": {
                  "type": "string",
                  "enum": [
                    "",
                    "1",
                    "7",
                    "14",
                    "30",
                    "90",
                    "6m",
                    "12m",
                    "24m",
                    "36m"
                  ],
                  "default": "",
                  "description": "Optional maximum listing-age bucket supported by home-sale searches."
                },
                "maxPages": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 2,
                  "default": 1,
                  "description": "Maximum rendered result pages for apartment-market reports."
                },
                "maxListings": {
                  "type": "integer",
                  "minimum": 10,
                  "maximum": 100,
                  "default": 100,
                  "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
                },
                "shortlistLimit": {
                  "type": "integer",
                  "minimum": 3,
                  "maximum": 15,
                  "default": 10,
                  "description": "Maximum ranked listings to include in the shortlist."
                },
                "includeMarkdown": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "report",
                "listings",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True only when enough evidence was collected to deliver the report."
                },
                "tool": {
                  "type": "object",
                  "description": "AgentBodega product identity and department.",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "description": "Normalized report request and enforced limits.",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "description": "Source-neutral routing and freshness metadata.",
                  "additionalProperties": true
                },
                "report": {
                  "type": "object",
                  "required": [
                    "title",
                    "executive_summary",
                    "insights",
                    "sample",
                    "benchmarks",
                    "price_bands",
                    "market_positions",
                    "market_signals",
                    "segments",
                    "decision_lenses",
                    "shortlist",
                    "outliers",
                    "evidence_manifest",
                    "data_quality",
                    "methodology"
                  ],
                  "properties": {
                    "title": {
                      "type": "string"
                    },
                    "executive_summary": {
                      "type": "string",
                      "description": "Deterministic summary grounded in the returned sample metrics."
                    },
                    "insights": {
                      "type": "array",
                      "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                      "items": {
                        "type": "string"
                      }
                    },
                    "sample": {
                      "type": "object",
                      "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                      "additionalProperties": true
                    },
                    "benchmarks": {
                      "type": "object",
                      "required": [
                        "list_price_usd",
                        "square_feet",
                        "price_per_sqft_usd",
                        "days_on_market",
                        "bedrooms"
                      ],
                      "properties": {
                        "list_price_usd": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "square_feet": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "price_per_sqft_usd": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "days_on_market": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "bedrooms": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_bands": {
                      "type": "object",
                      "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                      "additionalProperties": true
                    },
                    "market_positions": {
                      "type": "object",
                      "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                      "additionalProperties": true
                    },
                    "market_signals": {
                      "type": "object",
                      "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                      "additionalProperties": true
                    },
                    "segments": {
                      "type": "object",
                      "description": "Inventory groups by home type, postal code, and bedroom count.",
                      "additionalProperties": true
                    },
                    "decision_lenses": {
                      "type": "object",
                      "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                      "additionalProperties": true
                    },
                    "shortlist": {
                      "type": "array",
                      "description": "Listings ranked against the requested objective and the current report sample.",
                      "items": {
                        "type": "object",
                        "required": [
                          "rank",
                          "score",
                          "listing_id",
                          "address",
                          "price_usd",
                          "reasons"
                        ],
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "score": {
                            "type": "number"
                          },
                          "listing_id": {
                            "type": "string"
                          },
                          "address": {
                            "type": "string"
                          },
                          "listing_url": {
                            "type": "string"
                          },
                          "price_usd": {
                            "type": "number"
                          },
                          "beds": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "baths": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "sqft": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_per_sqft_usd": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "days_on_market": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_vs_market_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_per_sqft_vs_market_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "cohort": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Context against listings with the same normalized home type and bedroom count.",
                            "additionalProperties": true
                          },
                          "reasons": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "outliers": {
                      "type": "object",
                      "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                      "additionalProperties": true
                    },
                    "evidence_manifest": {
                      "type": "object",
                      "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                      "additionalProperties": true
                    },
                    "data_quality": {
                      "type": "object",
                      "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                      "additionalProperties": true
                    },
                    "methodology": {
                      "type": "object",
                      "description": "Transparent calculation and interpretation boundaries.",
                      "additionalProperties": true
                    },
                    "markdown": {
                      "type": "string",
                      "description": "Optional ready-to-render report."
                    }
                  },
                  "additionalProperties": true
                },
                "listings": {
                  "type": "array",
                  "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.75"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.75",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/real-estate/intelligence",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.75"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/real-estate/intelligence",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "real-estate",
        "kind": "real-estate-report",
        "taxonomy": {
          "departmentId": "real-estate",
          "department": "Real Estate",
          "aisleId": "market-intelligence",
          "aisle": "Market Intelligence",
          "shelfId": "market-reports",
          "shelf": "Market Reports",
          "offeringId": "real-estate-market-intelligence",
          "offering": "Real Estate Market Intelligence Report",
          "pathIds": [
            "real-estate",
            "market-intelligence",
            "market-reports",
            "real-estate-market-intelligence"
          ],
          "pathLabels": [
            "Real Estate",
            "Market Intelligence",
            "Market Reports",
            "Real Estate Market Intelligence Report"
          ],
          "taxonomyPath": "real-estate.market-intelligence.market-reports.real-estate-market-intelligence",
          "layout": {
            "department": {
              "id": "real-estate",
              "name": "Real Estate"
            },
            "aisle": {
              "id": "market-intelligence",
              "name": "Market Intelligence"
            },
            "shelf": {
              "id": "market-reports",
              "name": "Market Reports"
            },
            "offering": {
              "id": "real-estate-market-intelligence",
              "name": "Real Estate Market Intelligence Report"
            },
            "pathIds": [
              "real-estate",
              "market-intelligence",
              "market-reports",
              "real-estate-market-intelligence"
            ],
            "pathLabels": [
              "Real Estate",
              "Market Intelligence",
              "Market Reports",
              "Real Estate Market Intelligence Report"
            ]
          }
        },
        "description": {
          "short": "Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.",
          "full": "Purpose: Turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nBest use: Use this when an agent needs turn up to 100 current public home or rental listings into a deterministic market report with exact ZIP and min/max price, bedroom, bathroom, and square-foot filters; price bands; value-position quadrants; inventory signals; cohort context; five decision lenses; anomaly review flags; a ranked shortlist; confidence; limitations; and optional Markdown. This report-only product returns aggregates and shortlist evidence, not every analyzed row. Requires market or zipCode and at least five usable priced listings; failed or insufficient runs are not settled.\nPrice: $0.75 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "market"
              ]
            },
            {
              "required": [
                "zipCode"
              ]
            }
          ],
          "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
          "properties": {
            "market": {
              "type": "string",
              "minLength": 2,
              "maxLength": 180,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
            },
            "objective": {
              "type": "string",
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced",
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Market Intelligence Report. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Optional home-type filters for home-sale searches."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used for apartment-market reports."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Optional maximum listing-age bucket supported by home-sale searches."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered result pages for apartment-market reports."
            },
            "maxListings": {
              "type": "integer",
              "minimum": 10,
              "maximum": 100,
              "default": 100,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
            },
            "shortlistLimit": {
              "type": "integer",
              "minimum": 3,
              "maximum": 15,
              "default": 10,
              "description": "Maximum ranked listings to include in the shortlist."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "market"
              ]
            },
            {
              "required": [
                "zipCode"
              ]
            }
          ],
          "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
          "properties": {
            "market": {
              "type": "string",
              "minLength": 2,
              "maxLength": 180,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
            },
            "objective": {
              "type": "string",
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced",
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Market Intelligence Report. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Optional home-type filters for home-sale searches."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used for apartment-market reports."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Optional maximum listing-age bucket supported by home-sale searches."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered result pages for apartment-market reports."
            },
            "maxListings": {
              "type": "integer",
              "minimum": 10,
              "maximum": 100,
              "default": 100,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
            },
            "shortlistLimit": {
              "type": "integer",
              "minimum": 3,
              "maximum": 15,
              "default": 10,
              "description": "Maximum ranked listings to include in the shortlist."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "market",
            "zipCode",
            "listingType",
            "objective",
            "priceMin",
            "priceMax",
            "bedsMin",
            "bedsMax",
            "bathsMin",
            "bathsMax",
            "sqftMin",
            "sqftMax",
            "homeTypes",
            "propertyType",
            "bedrooms",
            "maxRent",
            "sortBy",
            "daysOnMarket",
            "maxPages",
            "maxListings",
            "shortlistLimit",
            "includeMarkdown"
          ],
          "fields": [
            {
              "name": "market",
              "type": "string",
              "required": false,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
              "constraints": {
                "minLength": 2,
                "maxLength": 180
              }
            },
            {
              "name": "zipCode",
              "type": "string",
              "required": false,
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            {
              "name": "listingType",
              "type": "string",
              "required": false,
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
              "constraints": {
                "enum": [
                  "for_sale",
                  "for_rent",
                  "foreclosure"
                ],
                "default": "for_sale"
              }
            },
            {
              "name": "objective",
              "type": "string",
              "required": false,
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
              "constraints": {
                "enum": [
                  "balanced",
                  "value",
                  "low-price",
                  "newest",
                  "space"
                ],
                "default": "balanced"
              }
            },
            {
              "name": "priceMin",
              "type": "integer",
              "required": false,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "priceMax",
              "type": "integer",
              "required": false,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "bedsMin",
              "type": "integer",
              "required": false,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bedsMax",
              "type": "integer",
              "required": false,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMin",
              "type": "number",
              "required": false,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMax",
              "type": "number",
              "required": false,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "sqftMin",
              "type": "integer",
              "required": false,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "sqftMax",
              "type": "integer",
              "required": false,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "homeTypes",
              "type": "array",
              "required": false,
              "description": "Optional home-type filters for home-sale searches.",
              "constraints": {
                "maxItems": 7
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "propertyType",
              "type": "string",
              "required": false,
              "description": "Rental property type used for apartment-market reports.",
              "constraints": {
                "enum": [
                  "apartments",
                  "houses",
                  "townhomes",
                  "condos"
                ]
              }
            },
            {
              "name": "bedrooms",
              "type": "any",
              "required": false,
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            {
              "name": "maxRent",
              "type": "integer",
              "required": false,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "sortBy",
              "type": "string",
              "required": false,
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
              "constraints": {
                "enum": [
                  "newest",
                  "relevance",
                  "pricea",
                  "priced",
                  "beds",
                  "baths",
                  "size",
                  "lot",
                  "zest"
                ],
                "default": "newest"
              }
            },
            {
              "name": "daysOnMarket",
              "type": "string",
              "required": false,
              "description": "Optional maximum listing-age bucket supported by home-sale searches.",
              "constraints": {
                "enum": [
                  "",
                  "1",
                  "7",
                  "14",
                  "30",
                  "90",
                  "6m",
                  "12m",
                  "24m",
                  "36m"
                ],
                "default": ""
              }
            },
            {
              "name": "maxPages",
              "type": "integer",
              "required": false,
              "description": "Maximum rendered result pages for apartment-market reports.",
              "constraints": {
                "default": 1,
                "minimum": 1,
                "maximum": 2
              }
            },
            {
              "name": "maxListings",
              "type": "integer",
              "required": false,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
              "constraints": {
                "default": 100,
                "minimum": 10,
                "maximum": 100
              }
            },
            {
              "name": "shortlistLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum ranked listings to include in the shortlist.",
              "constraints": {
                "default": 10,
                "minimum": 3,
                "maximum": 15
              }
            },
            {
              "name": "includeMarkdown",
              "type": "boolean",
              "required": false,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "listingType": "for_sale",
            "objective": "value",
            "priceMin": 200000,
            "priceMax": 750000,
            "bedsMin": 2,
            "bedsMax": 4,
            "bathsMin": 1.5,
            "bathsMax": 4,
            "sqftMin": 1000,
            "sqftMax": 3500,
            "maxListings": 100,
            "shortlistLimit": 10,
            "includeMarkdown": true
          },
          "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
        },
        "exampleRequest": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "objective": "value",
          "priceMin": 200000,
          "priceMax": 750000,
          "bedsMin": 2,
          "bedsMax": 4,
          "bathsMin": 1.5,
          "bathsMax": 4,
          "sqftMin": 1000,
          "sqftMax": 3500,
          "maxListings": 100,
          "shortlistLimit": 10,
          "includeMarkdown": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "report",
            "listings",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True only when enough evidence was collected to deliver the report."
            },
            "tool": {
              "type": "object",
              "description": "AgentBodega product identity and department.",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "description": "Normalized report request and enforced limits.",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "description": "Source-neutral routing and freshness metadata.",
              "additionalProperties": true
            },
            "report": {
              "type": "object",
              "required": [
                "title",
                "executive_summary",
                "insights",
                "sample",
                "benchmarks",
                "price_bands",
                "market_positions",
                "market_signals",
                "segments",
                "decision_lenses",
                "shortlist",
                "outliers",
                "evidence_manifest",
                "data_quality",
                "methodology"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "executive_summary": {
                  "type": "string",
                  "description": "Deterministic summary grounded in the returned sample metrics."
                },
                "insights": {
                  "type": "array",
                  "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                  "items": {
                    "type": "string"
                  }
                },
                "sample": {
                  "type": "object",
                  "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                  "additionalProperties": true
                },
                "benchmarks": {
                  "type": "object",
                  "required": [
                    "list_price_usd",
                    "square_feet",
                    "price_per_sqft_usd",
                    "days_on_market",
                    "bedrooms"
                  ],
                  "properties": {
                    "list_price_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "square_feet": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_per_sqft_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "days_on_market": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "bedrooms": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "price_bands": {
                  "type": "object",
                  "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                  "additionalProperties": true
                },
                "market_positions": {
                  "type": "object",
                  "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                  "additionalProperties": true
                },
                "market_signals": {
                  "type": "object",
                  "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                  "additionalProperties": true
                },
                "segments": {
                  "type": "object",
                  "description": "Inventory groups by home type, postal code, and bedroom count.",
                  "additionalProperties": true
                },
                "decision_lenses": {
                  "type": "object",
                  "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                  "additionalProperties": true
                },
                "shortlist": {
                  "type": "array",
                  "description": "Listings ranked against the requested objective and the current report sample.",
                  "items": {
                    "type": "object",
                    "required": [
                      "rank",
                      "score",
                      "listing_id",
                      "address",
                      "price_usd",
                      "reasons"
                    ],
                    "properties": {
                      "rank": {
                        "type": "integer"
                      },
                      "score": {
                        "type": "number"
                      },
                      "listing_id": {
                        "type": "string"
                      },
                      "address": {
                        "type": "string"
                      },
                      "listing_url": {
                        "type": "string"
                      },
                      "price_usd": {
                        "type": "number"
                      },
                      "beds": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "baths": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "days_on_market": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "cohort": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Context against listings with the same normalized home type and bedroom count.",
                        "additionalProperties": true
                      },
                      "reasons": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "outliers": {
                  "type": "object",
                  "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                  "additionalProperties": true
                },
                "evidence_manifest": {
                  "type": "object",
                  "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                  "additionalProperties": true
                },
                "data_quality": {
                  "type": "object",
                  "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                  "additionalProperties": true
                },
                "methodology": {
                  "type": "object",
                  "description": "Transparent calculation and interpretation boundaries.",
                  "additionalProperties": true
                },
                "markdown": {
                  "type": "string",
                  "description": "Optional ready-to-render report."
                }
              },
              "additionalProperties": true
            },
            "listings": {
              "type": "array",
              "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "report",
            "listings",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True only when enough evidence was collected to deliver the report."
            },
            "tool": {
              "type": "object",
              "description": "AgentBodega product identity and department.",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "description": "Normalized report request and enforced limits.",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "description": "Source-neutral routing and freshness metadata.",
              "additionalProperties": true
            },
            "report": {
              "type": "object",
              "required": [
                "title",
                "executive_summary",
                "insights",
                "sample",
                "benchmarks",
                "price_bands",
                "market_positions",
                "market_signals",
                "segments",
                "decision_lenses",
                "shortlist",
                "outliers",
                "evidence_manifest",
                "data_quality",
                "methodology"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "executive_summary": {
                  "type": "string",
                  "description": "Deterministic summary grounded in the returned sample metrics."
                },
                "insights": {
                  "type": "array",
                  "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                  "items": {
                    "type": "string"
                  }
                },
                "sample": {
                  "type": "object",
                  "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                  "additionalProperties": true
                },
                "benchmarks": {
                  "type": "object",
                  "required": [
                    "list_price_usd",
                    "square_feet",
                    "price_per_sqft_usd",
                    "days_on_market",
                    "bedrooms"
                  ],
                  "properties": {
                    "list_price_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "square_feet": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_per_sqft_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "days_on_market": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "bedrooms": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "price_bands": {
                  "type": "object",
                  "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                  "additionalProperties": true
                },
                "market_positions": {
                  "type": "object",
                  "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                  "additionalProperties": true
                },
                "market_signals": {
                  "type": "object",
                  "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                  "additionalProperties": true
                },
                "segments": {
                  "type": "object",
                  "description": "Inventory groups by home type, postal code, and bedroom count.",
                  "additionalProperties": true
                },
                "decision_lenses": {
                  "type": "object",
                  "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                  "additionalProperties": true
                },
                "shortlist": {
                  "type": "array",
                  "description": "Listings ranked against the requested objective and the current report sample.",
                  "items": {
                    "type": "object",
                    "required": [
                      "rank",
                      "score",
                      "listing_id",
                      "address",
                      "price_usd",
                      "reasons"
                    ],
                    "properties": {
                      "rank": {
                        "type": "integer"
                      },
                      "score": {
                        "type": "number"
                      },
                      "listing_id": {
                        "type": "string"
                      },
                      "address": {
                        "type": "string"
                      },
                      "listing_url": {
                        "type": "string"
                      },
                      "price_usd": {
                        "type": "number"
                      },
                      "beds": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "baths": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "days_on_market": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "cohort": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Context against listings with the same normalized home type and bedroom count.",
                        "additionalProperties": true
                      },
                      "reasons": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "outliers": {
                  "type": "object",
                  "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                  "additionalProperties": true
                },
                "evidence_manifest": {
                  "type": "object",
                  "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                  "additionalProperties": true
                },
                "data_quality": {
                  "type": "object",
                  "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                  "additionalProperties": true
                },
                "methodology": {
                  "type": "object",
                  "description": "Transparent calculation and interpretation boundaries.",
                  "additionalProperties": true
                },
                "markdown": {
                  "type": "string",
                  "description": "Optional ready-to-render report."
                }
              },
              "additionalProperties": true
            },
            "listings": {
              "type": "array",
              "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "real-estate-market-intelligence",
            "name": "Real Estate Market Intelligence Report",
            "department": "Real Estate"
          },
          "requested": {
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "filters": {
              "zipCode": "77008",
              "priceMin": 200000,
              "priceMax": 750000,
              "bedsMin": 2,
              "bedsMax": 4,
              "bathsMin": 1.5,
              "bathsMax": 4,
              "sqftMin": 1000,
              "sqftMax": 3500
            },
            "inventoryClass": "home-listings",
            "listingType": "for_sale",
            "objective": "value",
            "maxListings": 100,
            "shortlistLimit": 10,
            "evidenceScope": "shortlist-only",
            "includeMarkdown": true,
            "smartScrape": false
          },
          "source": {
            "selected": "managed-public-listings",
            "inventoryClass": "home-listings",
            "routing": "managed-adapter",
            "resultFreshness": "live-run",
            "upstreamDetailsDisclosed": false
          },
          "report": {
            "title": "Houston, TX 77008 Real Estate Market Intelligence",
            "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008. The sample median listing price is $525,000 and the median price per square foot is $248. The value shortlist ranks listings only against this current sample. Data confidence is high.",
            "insights": [
              "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000.",
              "11 of 39 listings with square-footage evidence sit below both sample medians."
            ],
            "sample": {
              "raw_count": 50,
              "duplicate_count": 3,
              "unique_count": 47,
              "eligible_count": 42,
              "excluded_count": 5
            },
            "benchmarks": {
              "list_price_usd": {
                "count": 42,
                "min": 239000,
                "p25": 389000,
                "median": 525000,
                "mean": 548120.24,
                "p75": 675000,
                "max": 750000
              },
              "square_feet": {
                "count": 39,
                "min": 960,
                "p25": 1480,
                "median": 1980,
                "mean": 2051.41,
                "p75": 2440,
                "max": 3890
              },
              "price_per_sqft_usd": {
                "count": 39,
                "min": 174.82,
                "p25": 215.6,
                "median": 248,
                "mean": 252.43,
                "p75": 284.7,
                "max": 342.91
              },
              "days_on_market": {
                "count": 31,
                "min": 1,
                "p25": 7,
                "median": 18,
                "mean": 27.42,
                "p75": 35,
                "max": 103
              },
              "bedrooms": {
                "count": 42,
                "min": 2,
                "p25": 3,
                "median": 3,
                "mean": 3.29,
                "p75": 4,
                "max": 6
              }
            },
            "price_bands": {
              "basis": "current sample list price quartiles",
              "observed_count": 42,
              "bands": [
                {
                  "id": "under-p25",
                  "label": "Lower quartile",
                  "count": 11,
                  "share_pct": 26.2,
                  "lower_usd": null,
                  "upper_usd": 389000
                }
              ]
            },
            "market_positions": {
              "basis": {
                "median_price_usd": 525000,
                "median_price_per_sqft_usd": 248
              },
              "observed_count": 39,
              "positions": [
                {
                  "id": "relative-value",
                  "label": "Below both medians",
                  "count": 11,
                  "share_pct": 28.2
                }
              ]
            },
            "market_signals": {
              "below_median_price": {
                "count": 21,
                "share_pct": 50
              },
              "below_both_price_medians": {
                "count": 11,
                "share_pct": 28.2,
                "observed_count": 39
              },
              "fresh_7_days_or_less": {
                "count": 8,
                "share_pct": 25.8,
                "observed_count": 31
              }
            },
            "segments": {
              "by_home_type": [
                {
                  "label": "SINGLE_FAMILY",
                  "count": 28,
                  "median_price_usd": 549500,
                  "median_price_per_sqft_usd": 251.2
                }
              ],
              "by_postal_code": [
                {
                  "label": "77008",
                  "count": 42,
                  "median_price_usd": 525000,
                  "median_price_per_sqft_usd": 248
                }
              ],
              "by_bedrooms": [
                {
                  "label": "3 bedrooms",
                  "count": 24,
                  "median_price_usd": 510000,
                  "median_price_per_sqft_usd": 246.5
                }
              ]
            },
            "decision_lenses": {
              "balanced": [
                {
                  "rank": 1,
                  "listing_id": "84007409",
                  "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                  "price_usd": 450000
                }
              ],
              "value": [
                {
                  "rank": 1,
                  "listing_id": "84007409",
                  "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                  "price_usd": 450000
                }
              ]
            },
            "shortlist": [
              {
                "rank": 1,
                "score": 94.2,
                "listing_id": "84007409",
                "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                "listing_url": "https://example.com/listing/84007409",
                "price_usd": 450000,
                "beds": 3,
                "baths": 4,
                "sqft": 2043,
                "price_per_sqft_usd": 220.26,
                "days_on_market": 6,
                "price_vs_market_pct": -14.3,
                "price_per_sqft_vs_market_pct": -11.2,
                "reasons": [
                  "14.3% below sample median price",
                  "11.2% below sample median price per square foot"
                ]
              }
            ],
            "outliers": {
              "method": "1.5 x interquartile range review flags",
              "interpretation": "Review flags are not valuation claims.",
              "count": 0,
              "listings": []
            },
            "evidence_manifest": {
              "analyzed_listing_count": 42,
              "returned_listing_count": 0,
              "evidence_scope": "shortlist-only",
              "full_listing_rows_included": false,
              "shortlist_count": 10,
              "enforced_max_listing_cap": 100
            },
            "data_quality": {
              "confidence": "high",
              "coverage": {
                "price_pct": 100,
                "address_pct": 100,
                "listing_url_pct": 100,
                "square_feet_pct": 92.9,
                "price_per_sqft_pct": 92.9,
                "days_on_market_pct": 73.8,
                "bedrooms_pct": 100
              },
              "warnings": [
                "Public listing inventory can change after this snapshot and may not include every listing in the market."
              ],
              "limitations": [
                "Current public listing sample, not full MLS coverage."
              ]
            },
            "methodology": {
              "calculation": "Deterministic descriptive statistics with interpolated quartiles and relative within-sample ranking.",
              "ranking_objective": "value",
              "minimum_usable_listings": 5,
              "historical_trends_included": false,
              "appraisal_or_investment_advice": false
            },
            "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nAnalyzed 42 unique current listings."
          },
          "listings": [],
          "checkedAt": "2026-07-14T00:00:00.000Z"
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/real-estate/intelligence/bundle",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Real Estate Intelligence + Evidence Bundle",
      "description": "Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.",
      "longDescription": "Purpose: Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nBest use: Use this when an agent needs return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nPrice: $0.85 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```",
      "category": "real-estate",
      "kind": "real-estate-report-bundle",
      "departmentId": "real-estate",
      "department": "Real Estate",
      "aisleId": "market-intelligence",
      "aisle": "Market Intelligence",
      "shelfId": "market-reports",
      "shelf": "Market Reports",
      "offeringId": "real-estate-market-intelligence-with-listings",
      "offering": "Real Estate Intelligence + Evidence Bundle",
      "pathIds": [
        "real-estate",
        "market-intelligence",
        "market-reports",
        "real-estate-market-intelligence-with-listings"
      ],
      "pathLabels": [
        "Real Estate",
        "Market Intelligence",
        "Market Reports",
        "Real Estate Intelligence + Evidence Bundle"
      ],
      "taxonomyPath": "real-estate.market-intelligence.market-reports.real-estate-market-intelligence-with-listings",
      "layout": {
        "department": {
          "id": "real-estate",
          "name": "Real Estate"
        },
        "aisle": {
          "id": "market-intelligence",
          "name": "Market Intelligence"
        },
        "shelf": {
          "id": "market-reports",
          "name": "Market Reports"
        },
        "offering": {
          "id": "real-estate-market-intelligence-with-listings",
          "name": "Real Estate Intelligence + Evidence Bundle"
        },
        "pathIds": [
          "real-estate",
          "market-intelligence",
          "market-reports",
          "real-estate-market-intelligence-with-listings"
        ],
        "pathLabels": [
          "Real Estate",
          "Market Intelligence",
          "Market Reports",
          "Real Estate Intelligence + Evidence Bundle"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "real-estate",
        "market-intelligence",
        "market-report",
        "evidence-bundle",
        "analyzed-listings",
        "listing-analysis",
        "pricing-benchmarks",
        "price-bands",
        "decision-lenses",
        "housing",
        "for-sale",
        "for-rent",
        "public-data",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "850000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "850000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "anyOf": [
          {
            "required": [
              "market"
            ]
          },
          {
            "required": [
              "zipCode"
            ]
          }
        ],
        "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
        "properties": {
          "market": {
            "type": "string",
            "minLength": 2,
            "maxLength": 180,
            "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
          },
          "zipCode": {
            "type": "string",
            "pattern": "^\\d{5}$",
            "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
          },
          "listingType": {
            "type": "string",
            "enum": [
              "for_sale",
              "for_rent",
              "foreclosure"
            ],
            "default": "for_sale",
            "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
          },
          "objective": {
            "type": "string",
            "enum": [
              "balanced",
              "value",
              "low-price",
              "newest",
              "space"
            ],
            "default": "balanced",
            "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
          },
          "priceMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
          },
          "priceMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
          },
          "bedsMin": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
          },
          "bedsMax": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
          },
          "bathsMin": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
          },
          "bathsMax": {
            "type": "number",
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
          },
          "sqftMin": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
          },
          "sqftMax": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
          },
          "homeTypes": {
            "type": "array",
            "maxItems": 7,
            "items": {
              "type": "string",
              "enum": [
                "houses",
                "townhomes",
                "multifamily",
                "condos",
                "land",
                "apartments",
                "manufactured"
              ],
              "description": "Home Types item filter for Real Estate Intelligence + Evidence Bundle. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
            },
            "description": "Optional home-type filters for home-sale searches."
          },
          "propertyType": {
            "type": "string",
            "enum": [
              "apartments",
              "houses",
              "townhomes",
              "condos"
            ],
            "description": "Rental property type used for apartment-market reports."
          },
          "bedrooms": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "any",
                  "studio",
                  "1",
                  "2",
                  "3",
                  "4",
                  "5+"
                ]
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 5
              }
            ],
            "description": "Rental bedroom filter used for apartment-market reports."
          },
          "maxRent": {
            "type": "integer",
            "minimum": 0,
            "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "newest",
              "relevance",
              "pricea",
              "priced",
              "beds",
              "baths",
              "size",
              "lot",
              "zest"
            ],
            "default": "newest",
            "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
          },
          "daysOnMarket": {
            "type": "string",
            "enum": [
              "",
              "1",
              "7",
              "14",
              "30",
              "90",
              "6m",
              "12m",
              "24m",
              "36m"
            ],
            "default": "",
            "description": "Optional maximum listing-age bucket supported by home-sale searches."
          },
          "maxPages": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2,
            "default": 1,
            "description": "Maximum rendered result pages for apartment-market reports."
          },
          "maxListings": {
            "type": "integer",
            "minimum": 10,
            "maximum": 100,
            "default": 100,
            "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
          },
          "shortlistLimit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 15,
            "default": 10,
            "description": "Maximum ranked listings to include in the shortlist."
          },
          "includeMarkdown": {
            "type": "boolean",
            "default": true,
            "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "market",
          "zipCode",
          "listingType",
          "objective",
          "priceMin",
          "priceMax",
          "bedsMin",
          "bedsMax",
          "bathsMin",
          "bathsMax",
          "sqftMin",
          "sqftMax",
          "homeTypes",
          "propertyType",
          "bedrooms",
          "maxRent",
          "sortBy",
          "daysOnMarket",
          "maxPages",
          "maxListings",
          "shortlistLimit",
          "includeMarkdown"
        ],
        "fields": [
          {
            "name": "market",
            "type": "string",
            "required": false,
            "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
            "constraints": {
              "minLength": 2,
              "maxLength": 180
            }
          },
          {
            "name": "zipCode",
            "type": "string",
            "required": false,
            "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
          },
          {
            "name": "listingType",
            "type": "string",
            "required": false,
            "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
            "constraints": {
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale"
            }
          },
          {
            "name": "objective",
            "type": "string",
            "required": false,
            "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
            "constraints": {
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced"
            }
          },
          {
            "name": "priceMin",
            "type": "integer",
            "required": false,
            "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "priceMax",
            "type": "integer",
            "required": false,
            "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "bedsMin",
            "type": "integer",
            "required": false,
            "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bedsMax",
            "type": "integer",
            "required": false,
            "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMin",
            "type": "number",
            "required": false,
            "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "bathsMax",
            "type": "number",
            "required": false,
            "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
            "constraints": {
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "sqftMin",
            "type": "integer",
            "required": false,
            "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "sqftMax",
            "type": "integer",
            "required": false,
            "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "homeTypes",
            "type": "array",
            "required": false,
            "description": "Optional home-type filters for home-sale searches.",
            "constraints": {
              "maxItems": 7
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "propertyType",
            "type": "string",
            "required": false,
            "description": "Rental property type used for apartment-market reports.",
            "constraints": {
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ]
            }
          },
          {
            "name": "bedrooms",
            "type": "any",
            "required": false,
            "description": "Rental bedroom filter used for apartment-market reports."
          },
          {
            "name": "maxRent",
            "type": "integer",
            "required": false,
            "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "sortBy",
            "type": "string",
            "required": false,
            "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
            "constraints": {
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest"
            }
          },
          {
            "name": "daysOnMarket",
            "type": "string",
            "required": false,
            "description": "Optional maximum listing-age bucket supported by home-sale searches.",
            "constraints": {
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": ""
            }
          },
          {
            "name": "maxPages",
            "type": "integer",
            "required": false,
            "description": "Maximum rendered result pages for apartment-market reports.",
            "constraints": {
              "default": 1,
              "minimum": 1,
              "maximum": 2
            }
          },
          {
            "name": "maxListings",
            "type": "integer",
            "required": false,
            "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
            "constraints": {
              "default": 100,
              "minimum": 10,
              "maximum": 100
            }
          },
          {
            "name": "shortlistLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum ranked listings to include in the shortlist.",
            "constraints": {
              "default": 10,
              "minimum": 3,
              "maximum": 15
            }
          },
          {
            "name": "includeMarkdown",
            "type": "boolean",
            "required": false,
            "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "objective": "value",
          "priceMin": 200000,
          "priceMax": 750000,
          "bedsMin": 2,
          "bedsMax": 4,
          "bathsMin": 1.5,
          "bathsMax": 4,
          "sqftMin": 1000,
          "sqftMax": 3500,
          "maxListings": 100,
          "shortlistLimit": 10,
          "includeMarkdown": true
        },
        "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
      },
      "exampleRequest": {
        "market": "Houston, TX 77008",
        "zipCode": "77008",
        "listingType": "for_sale",
        "objective": "value",
        "priceMin": 200000,
        "priceMax": 750000,
        "bedsMin": 2,
        "bedsMax": 4,
        "bathsMin": 1.5,
        "bathsMax": 4,
        "sqftMin": 1000,
        "sqftMax": 3500,
        "maxListings": 100,
        "shortlistLimit": 10,
        "includeMarkdown": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "source",
          "report",
          "listings",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True only when enough evidence was collected to deliver the report."
          },
          "tool": {
            "type": "object",
            "description": "AgentBodega product identity and department.",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "description": "Normalized report request and enforced limits.",
            "additionalProperties": true
          },
          "source": {
            "type": "object",
            "description": "Source-neutral routing and freshness metadata.",
            "additionalProperties": true
          },
          "report": {
            "type": "object",
            "required": [
              "title",
              "executive_summary",
              "insights",
              "sample",
              "benchmarks",
              "price_bands",
              "market_positions",
              "market_signals",
              "segments",
              "decision_lenses",
              "shortlist",
              "outliers",
              "evidence_manifest",
              "data_quality",
              "methodology"
            ],
            "properties": {
              "title": {
                "type": "string"
              },
              "executive_summary": {
                "type": "string",
                "description": "Deterministic summary grounded in the returned sample metrics."
              },
              "insights": {
                "type": "array",
                "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                "items": {
                  "type": "string"
                }
              },
              "sample": {
                "type": "object",
                "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                "additionalProperties": true
              },
              "benchmarks": {
                "type": "object",
                "required": [
                  "list_price_usd",
                  "square_feet",
                  "price_per_sqft_usd",
                  "days_on_market",
                  "bedrooms"
                ],
                "properties": {
                  "list_price_usd": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "square_feet": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "price_per_sqft_usd": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "days_on_market": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "bedrooms": {
                    "type": "object",
                    "required": [
                      "count",
                      "min",
                      "p25",
                      "median",
                      "mean",
                      "p75",
                      "max"
                    ],
                    "description": "Distribution summary computed from the eligible listing sample.",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of listings with a usable value for this metric."
                      },
                      "min": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p25": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "median": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "mean": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "p75": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "max": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              "price_bands": {
                "type": "object",
                "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                "additionalProperties": true
              },
              "market_positions": {
                "type": "object",
                "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                "additionalProperties": true
              },
              "market_signals": {
                "type": "object",
                "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                "additionalProperties": true
              },
              "segments": {
                "type": "object",
                "description": "Inventory groups by home type, postal code, and bedroom count.",
                "additionalProperties": true
              },
              "decision_lenses": {
                "type": "object",
                "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                "additionalProperties": true
              },
              "shortlist": {
                "type": "array",
                "description": "Listings ranked against the requested objective and the current report sample.",
                "items": {
                  "type": "object",
                  "required": [
                    "rank",
                    "score",
                    "listing_id",
                    "address",
                    "price_usd",
                    "reasons"
                  ],
                  "properties": {
                    "rank": {
                      "type": "integer"
                    },
                    "score": {
                      "type": "number"
                    },
                    "listing_id": {
                      "type": "string"
                    },
                    "address": {
                      "type": "string"
                    },
                    "listing_url": {
                      "type": "string"
                    },
                    "price_usd": {
                      "type": "number"
                    },
                    "beds": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "baths": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "sqft": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_per_sqft_usd": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "days_on_market": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_vs_market_pct": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "price_per_sqft_vs_market_pct": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "cohort": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Context against listings with the same normalized home type and bedroom count.",
                      "additionalProperties": true
                    },
                    "reasons": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "additionalProperties": true
                }
              },
              "outliers": {
                "type": "object",
                "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                "additionalProperties": true
              },
              "evidence_manifest": {
                "type": "object",
                "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                "additionalProperties": true
              },
              "data_quality": {
                "type": "object",
                "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                "additionalProperties": true
              },
              "methodology": {
                "type": "object",
                "description": "Transparent calculation and interpretation boundaries.",
                "additionalProperties": true
              },
              "markdown": {
                "type": "string",
                "description": "Optional ready-to-render report."
              }
            },
            "additionalProperties": true
          },
          "listings": {
            "type": "array",
            "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "real-estate-market-intelligence-with-listings",
          "name": "Real Estate Intelligence + Evidence Bundle",
          "department": "Real Estate"
        },
        "requested": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "filters": {
            "zipCode": "77008",
            "priceMin": 200000,
            "priceMax": 750000,
            "bedsMin": 2,
            "bedsMax": 4,
            "bathsMin": 1.5,
            "bathsMax": 4,
            "sqftMin": 1000,
            "sqftMax": 3500
          },
          "inventoryClass": "home-listings",
          "listingType": "for_sale",
          "objective": "value",
          "maxListings": 100,
          "shortlistLimit": 10,
          "evidenceScope": "all-analyzed",
          "includeMarkdown": true,
          "smartScrape": false
        },
        "source": {
          "selected": "managed-public-listings",
          "inventoryClass": "home-listings",
          "routing": "managed-adapter",
          "resultFreshness": "live-run",
          "upstreamDetailsDisclosed": false
        },
        "report": {
          "title": "Houston, TX 77008 Real Estate Market Intelligence",
          "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008 with complete normalized evidence rows included.",
          "insights": [
            "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000."
          ],
          "sample": {
            "raw_count": 50,
            "duplicate_count": 3,
            "unique_count": 47,
            "eligible_count": 42,
            "excluded_count": 5
          },
          "benchmarks": {
            "list_price_usd": {
              "count": 42,
              "min": 239000,
              "p25": 389000,
              "median": 525000,
              "mean": 548120.24,
              "p75": 675000,
              "max": 750000
            }
          },
          "price_bands": {
            "basis": "current sample list price quartiles",
            "observed_count": 42,
            "bands": [
              {
                "id": "under-p25",
                "label": "Lower quartile",
                "count": 11,
                "share_pct": 26.2,
                "lower_usd": null,
                "upper_usd": 389000
              }
            ]
          },
          "market_positions": {
            "basis": {
              "median_price_usd": 525000,
              "median_price_per_sqft_usd": 248
            },
            "observed_count": 39,
            "positions": [
              {
                "id": "relative-value",
                "label": "Below both medians",
                "count": 11,
                "share_pct": 28.2
              }
            ]
          },
          "market_signals": {
            "below_median_price": {
              "count": 21,
              "share_pct": 50
            }
          },
          "segments": {
            "by_home_type": [
              {
                "label": "SINGLE_FAMILY",
                "count": 28,
                "median_price_usd": 549500
              }
            ]
          },
          "decision_lenses": {
            "value": [
              {
                "rank": 1,
                "listing_id": "84007409",
                "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                "price_usd": 450000
              }
            ]
          },
          "shortlist": [
            {
              "rank": 1,
              "score": 94.2,
              "listing_id": "84007409",
              "address": "1328 W 23rd St Unit A, Houston, TX 77008",
              "price_usd": 450000,
              "reasons": [
                "Below both current sample medians"
              ]
            }
          ],
          "outliers": {
            "method": "1.5 x interquartile range review flags",
            "count": 0,
            "listings": []
          },
          "evidence_manifest": {
            "analyzed_listing_count": 42,
            "returned_listing_count": 42,
            "evidence_scope": "all-analyzed",
            "full_listing_rows_included": true,
            "shortlist_count": 10,
            "enforced_max_listing_cap": 100
          },
          "data_quality": {
            "confidence": "high",
            "warnings": [
              "Public listing inventory can change after this snapshot."
            ]
          },
          "methodology": {
            "calculation": "Deterministic descriptive statistics and relative within-sample ranking.",
            "ranking_objective": "value",
            "minimum_usable_listings": 5,
            "historical_trends_included": false,
            "appraisal_or_investment_advice": false
          },
          "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nComplete analyzed evidence included."
        },
        "listings": [
          {
            "listing_id": "84007409",
            "address": "1328 W 23rd St Unit A, Houston, TX 77008",
            "price_usd": 450000,
            "beds": 3,
            "baths": 4,
            "sqft": 2043,
            "price_per_sqft_usd": 220.26
          }
        ],
        "checkedAt": "2026-07-14T00:00:00.000Z"
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "objective": "value",
                "priceMin": 200000,
                "priceMax": 750000,
                "bedsMin": 2,
                "bedsMax": 4,
                "bathsMin": 1.5,
                "bathsMax": 4,
                "sqftMin": 1000,
                "sqftMax": 3500,
                "maxListings": 100,
                "shortlistLimit": 10,
                "includeMarkdown": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "real-estate-market-intelligence-with-listings",
                  "name": "Real Estate Intelligence + Evidence Bundle",
                  "department": "Real Estate"
                },
                "requested": {
                  "market": "Houston, TX 77008",
                  "zipCode": "77008",
                  "filters": {
                    "zipCode": "77008",
                    "priceMin": 200000,
                    "priceMax": 750000,
                    "bedsMin": 2,
                    "bedsMax": 4,
                    "bathsMin": 1.5,
                    "bathsMax": 4,
                    "sqftMin": 1000,
                    "sqftMax": 3500
                  },
                  "inventoryClass": "home-listings",
                  "listingType": "for_sale",
                  "objective": "value",
                  "maxListings": 100,
                  "shortlistLimit": 10,
                  "evidenceScope": "all-analyzed",
                  "includeMarkdown": true,
                  "smartScrape": false
                },
                "source": {
                  "selected": "managed-public-listings",
                  "inventoryClass": "home-listings",
                  "routing": "managed-adapter",
                  "resultFreshness": "live-run",
                  "upstreamDetailsDisclosed": false
                },
                "report": {
                  "title": "Houston, TX 77008 Real Estate Market Intelligence",
                  "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008 with complete normalized evidence rows included.",
                  "insights": [
                    "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000."
                  ],
                  "sample": {
                    "raw_count": 50,
                    "duplicate_count": 3,
                    "unique_count": 47,
                    "eligible_count": 42,
                    "excluded_count": 5
                  },
                  "benchmarks": {
                    "list_price_usd": {
                      "count": 42,
                      "min": 239000,
                      "p25": 389000,
                      "median": 525000,
                      "mean": 548120.24,
                      "p75": 675000,
                      "max": 750000
                    }
                  },
                  "price_bands": {
                    "basis": "current sample list price quartiles",
                    "observed_count": 42,
                    "bands": [
                      {
                        "id": "under-p25",
                        "label": "Lower quartile",
                        "count": 11,
                        "share_pct": 26.2,
                        "lower_usd": null,
                        "upper_usd": 389000
                      }
                    ]
                  },
                  "market_positions": {
                    "basis": {
                      "median_price_usd": 525000,
                      "median_price_per_sqft_usd": 248
                    },
                    "observed_count": 39,
                    "positions": [
                      {
                        "id": "relative-value",
                        "label": "Below both medians",
                        "count": 11,
                        "share_pct": 28.2
                      }
                    ]
                  },
                  "market_signals": {
                    "below_median_price": {
                      "count": 21,
                      "share_pct": 50
                    }
                  },
                  "segments": {
                    "by_home_type": [
                      {
                        "label": "SINGLE_FAMILY",
                        "count": 28,
                        "median_price_usd": 549500
                      }
                    ]
                  },
                  "decision_lenses": {
                    "value": [
                      {
                        "rank": 1,
                        "listing_id": "84007409",
                        "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                        "price_usd": 450000
                      }
                    ]
                  },
                  "shortlist": [
                    {
                      "rank": 1,
                      "score": 94.2,
                      "listing_id": "84007409",
                      "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                      "price_usd": 450000,
                      "reasons": [
                        "Below both current sample medians"
                      ]
                    }
                  ],
                  "outliers": {
                    "method": "1.5 x interquartile range review flags",
                    "count": 0,
                    "listings": []
                  },
                  "evidence_manifest": {
                    "analyzed_listing_count": 42,
                    "returned_listing_count": 42,
                    "evidence_scope": "all-analyzed",
                    "full_listing_rows_included": true,
                    "shortlist_count": 10,
                    "enforced_max_listing_cap": 100
                  },
                  "data_quality": {
                    "confidence": "high",
                    "warnings": [
                      "Public listing inventory can change after this snapshot."
                    ]
                  },
                  "methodology": {
                    "calculation": "Deterministic descriptive statistics and relative within-sample ranking.",
                    "ranking_objective": "value",
                    "minimum_usable_listings": 5,
                    "historical_trends_included": false,
                    "appraisal_or_investment_advice": false
                  },
                  "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nComplete analyzed evidence included."
                },
                "listings": [
                  {
                    "listing_id": "84007409",
                    "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                    "price_usd": 450000,
                    "beds": 3,
                    "baths": 4,
                    "sqft": 2043,
                    "price_per_sqft_usd": 220.26
                  }
                ],
                "checkedAt": "2026-07-14T00:00:00.000Z"
              }
            }
          },
          "routeTemplate": "/api/real-estate/intelligence/bundle",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "anyOf": [
                      {
                        "required": [
                          "market"
                        ]
                      },
                      {
                        "required": [
                          "zipCode"
                        ]
                      }
                    ],
                    "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
                    "properties": {
                      "market": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 180,
                        "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
                      },
                      "zipCode": {
                        "type": "string",
                        "pattern": "^\\d{5}$",
                        "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                      },
                      "listingType": {
                        "type": "string",
                        "enum": [
                          "for_sale",
                          "for_rent",
                          "foreclosure"
                        ],
                        "default": "for_sale",
                        "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
                      },
                      "objective": {
                        "type": "string",
                        "enum": [
                          "balanced",
                          "value",
                          "low-price",
                          "newest",
                          "space"
                        ],
                        "default": "balanced",
                        "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
                      },
                      "priceMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
                      },
                      "priceMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
                      },
                      "bedsMin": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                      },
                      "bedsMax": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                      },
                      "bathsMin": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                      },
                      "bathsMax": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10,
                        "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                      },
                      "sqftMin": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                      },
                      "sqftMax": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                      },
                      "homeTypes": {
                        "type": "array",
                        "maxItems": 7,
                        "items": {
                          "type": "string",
                          "enum": [
                            "houses",
                            "townhomes",
                            "multifamily",
                            "condos",
                            "land",
                            "apartments",
                            "manufactured"
                          ],
                          "description": "Home Types item filter for Real Estate Intelligence + Evidence Bundle. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                        },
                        "description": "Optional home-type filters for home-sale searches."
                      },
                      "propertyType": {
                        "type": "string",
                        "enum": [
                          "apartments",
                          "houses",
                          "townhomes",
                          "condos"
                        ],
                        "description": "Rental property type used for apartment-market reports."
                      },
                      "bedrooms": {
                        "oneOf": [
                          {
                            "type": "string",
                            "enum": [
                              "any",
                              "studio",
                              "1",
                              "2",
                              "3",
                              "4",
                              "5+"
                            ]
                          },
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 5
                          }
                        ],
                        "description": "Rental bedroom filter used for apartment-market reports."
                      },
                      "maxRent": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
                      },
                      "sortBy": {
                        "type": "string",
                        "enum": [
                          "newest",
                          "relevance",
                          "pricea",
                          "priced",
                          "beds",
                          "baths",
                          "size",
                          "lot",
                          "zest"
                        ],
                        "default": "newest",
                        "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
                      },
                      "daysOnMarket": {
                        "type": "string",
                        "enum": [
                          "",
                          "1",
                          "7",
                          "14",
                          "30",
                          "90",
                          "6m",
                          "12m",
                          "24m",
                          "36m"
                        ],
                        "default": "",
                        "description": "Optional maximum listing-age bucket supported by home-sale searches."
                      },
                      "maxPages": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 2,
                        "default": 1,
                        "description": "Maximum rendered result pages for apartment-market reports."
                      },
                      "maxListings": {
                        "type": "integer",
                        "minimum": 10,
                        "maximum": 100,
                        "default": 100,
                        "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
                      },
                      "shortlistLimit": {
                        "type": "integer",
                        "minimum": 3,
                        "maximum": 15,
                        "default": 10,
                        "description": "Maximum ranked listings to include in the shortlist."
                      },
                      "includeMarkdown": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "source",
                      "report",
                      "listings",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True only when enough evidence was collected to deliver the report."
                      },
                      "tool": {
                        "type": "object",
                        "description": "AgentBodega product identity and department.",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "description": "Normalized report request and enforced limits.",
                        "additionalProperties": true
                      },
                      "source": {
                        "type": "object",
                        "description": "Source-neutral routing and freshness metadata.",
                        "additionalProperties": true
                      },
                      "report": {
                        "type": "object",
                        "required": [
                          "title",
                          "executive_summary",
                          "insights",
                          "sample",
                          "benchmarks",
                          "price_bands",
                          "market_positions",
                          "market_signals",
                          "segments",
                          "decision_lenses",
                          "shortlist",
                          "outliers",
                          "evidence_manifest",
                          "data_quality",
                          "methodology"
                        ],
                        "properties": {
                          "title": {
                            "type": "string"
                          },
                          "executive_summary": {
                            "type": "string",
                            "description": "Deterministic summary grounded in the returned sample metrics."
                          },
                          "insights": {
                            "type": "array",
                            "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                            "items": {
                              "type": "string"
                            }
                          },
                          "sample": {
                            "type": "object",
                            "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                            "additionalProperties": true
                          },
                          "benchmarks": {
                            "type": "object",
                            "required": [
                              "list_price_usd",
                              "square_feet",
                              "price_per_sqft_usd",
                              "days_on_market",
                              "bedrooms"
                            ],
                            "properties": {
                              "list_price_usd": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "square_feet": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "price_per_sqft_usd": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "days_on_market": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              },
                              "bedrooms": {
                                "type": "object",
                                "required": [
                                  "count",
                                  "min",
                                  "p25",
                                  "median",
                                  "mean",
                                  "p75",
                                  "max"
                                ],
                                "description": "Distribution summary computed from the eligible listing sample.",
                                "properties": {
                                  "count": {
                                    "type": "integer",
                                    "description": "Number of listings with a usable value for this metric."
                                  },
                                  "min": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p25": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "median": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "mean": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "p75": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  },
                                  "max": {
                                    "type": [
                                      "number",
                                      "null"
                                    ]
                                  }
                                },
                                "additionalProperties": false
                              }
                            },
                            "additionalProperties": false
                          },
                          "price_bands": {
                            "type": "object",
                            "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                            "additionalProperties": true
                          },
                          "market_positions": {
                            "type": "object",
                            "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                            "additionalProperties": true
                          },
                          "market_signals": {
                            "type": "object",
                            "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                            "additionalProperties": true
                          },
                          "segments": {
                            "type": "object",
                            "description": "Inventory groups by home type, postal code, and bedroom count.",
                            "additionalProperties": true
                          },
                          "decision_lenses": {
                            "type": "object",
                            "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                            "additionalProperties": true
                          },
                          "shortlist": {
                            "type": "array",
                            "description": "Listings ranked against the requested objective and the current report sample.",
                            "items": {
                              "type": "object",
                              "required": [
                                "rank",
                                "score",
                                "listing_id",
                                "address",
                                "price_usd",
                                "reasons"
                              ],
                              "properties": {
                                "rank": {
                                  "type": "integer"
                                },
                                "score": {
                                  "type": "number"
                                },
                                "listing_id": {
                                  "type": "string"
                                },
                                "address": {
                                  "type": "string"
                                },
                                "listing_url": {
                                  "type": "string"
                                },
                                "price_usd": {
                                  "type": "number"
                                },
                                "beds": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "baths": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "sqft": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_per_sqft_usd": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "days_on_market": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_vs_market_pct": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "price_per_sqft_vs_market_pct": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "cohort": {
                                  "type": [
                                    "object",
                                    "null"
                                  ],
                                  "description": "Context against listings with the same normalized home type and bedroom count.",
                                  "additionalProperties": true
                                },
                                "reasons": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              },
                              "additionalProperties": true
                            }
                          },
                          "outliers": {
                            "type": "object",
                            "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                            "additionalProperties": true
                          },
                          "evidence_manifest": {
                            "type": "object",
                            "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                            "additionalProperties": true
                          },
                          "data_quality": {
                            "type": "object",
                            "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                            "additionalProperties": true
                          },
                          "methodology": {
                            "type": "object",
                            "description": "Transparent calculation and interpretation boundaries.",
                            "additionalProperties": true
                          },
                          "markdown": {
                            "type": "string",
                            "description": "Optional ready-to-render report."
                          }
                        },
                        "additionalProperties": true
                      },
                      "listings": {
                        "type": "array",
                        "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "real-estate-market-intelligence-with-listings",
            "url": "https://agentbodega.store/api/real-estate/intelligence/bundle",
            "method": "POST",
            "description": "Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.",
            "longDescription": "Purpose: Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nBest use: Use this when an agent needs return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nPrice: $0.85 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Real Estate Intelligence + Evidence Bundle",
            "category": "real-estate",
            "kind": "real-estate-report-bundle",
            "tags": [
              "real-estate",
              "market-intelligence",
              "market-report",
              "evidence-bundle",
              "analyzed-listings",
              "listing-analysis",
              "pricing-benchmarks",
              "price-bands",
              "decision-lenses",
              "housing",
              "for-sale",
              "for-rent",
              "public-data",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "market",
                "zipCode",
                "listingType",
                "objective",
                "priceMin",
                "priceMax",
                "bedsMin",
                "bedsMax",
                "bathsMin",
                "bathsMax",
                "sqftMin",
                "sqftMax",
                "homeTypes",
                "propertyType",
                "bedrooms",
                "maxRent",
                "sortBy",
                "daysOnMarket",
                "maxPages",
                "maxListings",
                "shortlistLimit",
                "includeMarkdown"
              ],
              "fields": [
                {
                  "name": "market",
                  "type": "string",
                  "required": false,
                  "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
                  "constraints": {
                    "minLength": 2,
                    "maxLength": 180
                  }
                },
                {
                  "name": "zipCode",
                  "type": "string",
                  "required": false,
                  "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                },
                {
                  "name": "listingType",
                  "type": "string",
                  "required": false,
                  "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
                  "constraints": {
                    "enum": [
                      "for_sale",
                      "for_rent",
                      "foreclosure"
                    ],
                    "default": "for_sale"
                  }
                },
                {
                  "name": "objective",
                  "type": "string",
                  "required": false,
                  "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
                  "constraints": {
                    "enum": [
                      "balanced",
                      "value",
                      "low-price",
                      "newest",
                      "space"
                    ],
                    "default": "balanced"
                  }
                },
                {
                  "name": "priceMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "priceMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "bedsMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bedsMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMin",
                  "type": "number",
                  "required": false,
                  "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "bathsMax",
                  "type": "number",
                  "required": false,
                  "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                {
                  "name": "sqftMin",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "sqftMax",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "homeTypes",
                  "type": "array",
                  "required": false,
                  "description": "Optional home-type filters for home-sale searches.",
                  "constraints": {
                    "maxItems": 7
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "propertyType",
                  "type": "string",
                  "required": false,
                  "description": "Rental property type used for apartment-market reports.",
                  "constraints": {
                    "enum": [
                      "apartments",
                      "houses",
                      "townhomes",
                      "condos"
                    ]
                  }
                },
                {
                  "name": "bedrooms",
                  "type": "any",
                  "required": false,
                  "description": "Rental bedroom filter used for apartment-market reports."
                },
                {
                  "name": "maxRent",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "sortBy",
                  "type": "string",
                  "required": false,
                  "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
                  "constraints": {
                    "enum": [
                      "newest",
                      "relevance",
                      "pricea",
                      "priced",
                      "beds",
                      "baths",
                      "size",
                      "lot",
                      "zest"
                    ],
                    "default": "newest"
                  }
                },
                {
                  "name": "daysOnMarket",
                  "type": "string",
                  "required": false,
                  "description": "Optional maximum listing-age bucket supported by home-sale searches.",
                  "constraints": {
                    "enum": [
                      "",
                      "1",
                      "7",
                      "14",
                      "30",
                      "90",
                      "6m",
                      "12m",
                      "24m",
                      "36m"
                    ],
                    "default": ""
                  }
                },
                {
                  "name": "maxPages",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum rendered result pages for apartment-market reports.",
                  "constraints": {
                    "default": 1,
                    "minimum": 1,
                    "maximum": 2
                  }
                },
                {
                  "name": "maxListings",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
                  "constraints": {
                    "default": 100,
                    "minimum": 10,
                    "maximum": 100
                  }
                },
                {
                  "name": "shortlistLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum ranked listings to include in the shortlist.",
                  "constraints": {
                    "default": 10,
                    "minimum": 3,
                    "maximum": 15
                  }
                },
                {
                  "name": "includeMarkdown",
                  "type": "boolean",
                  "required": false,
                  "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "market": "Houston, TX 77008",
                "zipCode": "77008",
                "listingType": "for_sale",
                "objective": "value",
                "priceMin": 200000,
                "priceMax": 750000,
                "bedsMin": 2,
                "bedsMax": 4,
                "bathsMin": 1.5,
                "bathsMax": 4,
                "sqftMin": 1000,
                "sqftMax": 3500,
                "maxListings": 100,
                "shortlistLimit": 10,
                "includeMarkdown": true
              },
              "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
            },
            "inputSchema": {
              "type": "object",
              "anyOf": [
                {
                  "required": [
                    "market"
                  ]
                },
                {
                  "required": [
                    "zipCode"
                  ]
                }
              ],
              "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
              "properties": {
                "market": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 180,
                  "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
                },
                "zipCode": {
                  "type": "string",
                  "pattern": "^\\d{5}$",
                  "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
                },
                "listingType": {
                  "type": "string",
                  "enum": [
                    "for_sale",
                    "for_rent",
                    "foreclosure"
                  ],
                  "default": "for_sale",
                  "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
                },
                "objective": {
                  "type": "string",
                  "enum": [
                    "balanced",
                    "value",
                    "low-price",
                    "newest",
                    "space"
                  ],
                  "default": "balanced",
                  "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
                },
                "priceMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
                },
                "priceMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
                },
                "bedsMin": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                },
                "bedsMax": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
                },
                "bathsMin": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                },
                "bathsMax": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10,
                  "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
                },
                "sqftMin": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                },
                "sqftMax": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
                },
                "homeTypes": {
                  "type": "array",
                  "maxItems": 7,
                  "items": {
                    "type": "string",
                    "enum": [
                      "houses",
                      "townhomes",
                      "multifamily",
                      "condos",
                      "land",
                      "apartments",
                      "manufactured"
                    ],
                    "description": "Home Types item filter for Real Estate Intelligence + Evidence Bundle. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
                  },
                  "description": "Optional home-type filters for home-sale searches."
                },
                "propertyType": {
                  "type": "string",
                  "enum": [
                    "apartments",
                    "houses",
                    "townhomes",
                    "condos"
                  ],
                  "description": "Rental property type used for apartment-market reports."
                },
                "bedrooms": {
                  "oneOf": [
                    {
                      "type": "string",
                      "enum": [
                        "any",
                        "studio",
                        "1",
                        "2",
                        "3",
                        "4",
                        "5+"
                      ]
                    },
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 5
                    }
                  ],
                  "description": "Rental bedroom filter used for apartment-market reports."
                },
                "maxRent": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
                },
                "sortBy": {
                  "type": "string",
                  "enum": [
                    "newest",
                    "relevance",
                    "pricea",
                    "priced",
                    "beds",
                    "baths",
                    "size",
                    "lot",
                    "zest"
                  ],
                  "default": "newest",
                  "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
                },
                "daysOnMarket": {
                  "type": "string",
                  "enum": [
                    "",
                    "1",
                    "7",
                    "14",
                    "30",
                    "90",
                    "6m",
                    "12m",
                    "24m",
                    "36m"
                  ],
                  "default": "",
                  "description": "Optional maximum listing-age bucket supported by home-sale searches."
                },
                "maxPages": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 2,
                  "default": 1,
                  "description": "Maximum rendered result pages for apartment-market reports."
                },
                "maxListings": {
                  "type": "integer",
                  "minimum": 10,
                  "maximum": 100,
                  "default": 100,
                  "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
                },
                "shortlistLimit": {
                  "type": "integer",
                  "minimum": 3,
                  "maximum": 15,
                  "default": 10,
                  "description": "Maximum ranked listings to include in the shortlist."
                },
                "includeMarkdown": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "source",
                "report",
                "listings",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True only when enough evidence was collected to deliver the report."
                },
                "tool": {
                  "type": "object",
                  "description": "AgentBodega product identity and department.",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "description": "Normalized report request and enforced limits.",
                  "additionalProperties": true
                },
                "source": {
                  "type": "object",
                  "description": "Source-neutral routing and freshness metadata.",
                  "additionalProperties": true
                },
                "report": {
                  "type": "object",
                  "required": [
                    "title",
                    "executive_summary",
                    "insights",
                    "sample",
                    "benchmarks",
                    "price_bands",
                    "market_positions",
                    "market_signals",
                    "segments",
                    "decision_lenses",
                    "shortlist",
                    "outliers",
                    "evidence_manifest",
                    "data_quality",
                    "methodology"
                  ],
                  "properties": {
                    "title": {
                      "type": "string"
                    },
                    "executive_summary": {
                      "type": "string",
                      "description": "Deterministic summary grounded in the returned sample metrics."
                    },
                    "insights": {
                      "type": "array",
                      "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                      "items": {
                        "type": "string"
                      }
                    },
                    "sample": {
                      "type": "object",
                      "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                      "additionalProperties": true
                    },
                    "benchmarks": {
                      "type": "object",
                      "required": [
                        "list_price_usd",
                        "square_feet",
                        "price_per_sqft_usd",
                        "days_on_market",
                        "bedrooms"
                      ],
                      "properties": {
                        "list_price_usd": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "square_feet": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "price_per_sqft_usd": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "days_on_market": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        "bedrooms": {
                          "type": "object",
                          "required": [
                            "count",
                            "min",
                            "p25",
                            "median",
                            "mean",
                            "p75",
                            "max"
                          ],
                          "description": "Distribution summary computed from the eligible listing sample.",
                          "properties": {
                            "count": {
                              "type": "integer",
                              "description": "Number of listings with a usable value for this metric."
                            },
                            "min": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p25": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "median": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "mean": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "p75": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "max": {
                              "type": [
                                "number",
                                "null"
                              ]
                            }
                          },
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_bands": {
                      "type": "object",
                      "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                      "additionalProperties": true
                    },
                    "market_positions": {
                      "type": "object",
                      "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                      "additionalProperties": true
                    },
                    "market_signals": {
                      "type": "object",
                      "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                      "additionalProperties": true
                    },
                    "segments": {
                      "type": "object",
                      "description": "Inventory groups by home type, postal code, and bedroom count.",
                      "additionalProperties": true
                    },
                    "decision_lenses": {
                      "type": "object",
                      "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                      "additionalProperties": true
                    },
                    "shortlist": {
                      "type": "array",
                      "description": "Listings ranked against the requested objective and the current report sample.",
                      "items": {
                        "type": "object",
                        "required": [
                          "rank",
                          "score",
                          "listing_id",
                          "address",
                          "price_usd",
                          "reasons"
                        ],
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "score": {
                            "type": "number"
                          },
                          "listing_id": {
                            "type": "string"
                          },
                          "address": {
                            "type": "string"
                          },
                          "listing_url": {
                            "type": "string"
                          },
                          "price_usd": {
                            "type": "number"
                          },
                          "beds": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "baths": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "sqft": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_per_sqft_usd": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "days_on_market": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_vs_market_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "price_per_sqft_vs_market_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "cohort": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Context against listings with the same normalized home type and bedroom count.",
                            "additionalProperties": true
                          },
                          "reasons": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "outliers": {
                      "type": "object",
                      "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                      "additionalProperties": true
                    },
                    "evidence_manifest": {
                      "type": "object",
                      "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                      "additionalProperties": true
                    },
                    "data_quality": {
                      "type": "object",
                      "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                      "additionalProperties": true
                    },
                    "methodology": {
                      "type": "object",
                      "description": "Transparent calculation and interpretation boundaries.",
                      "additionalProperties": true
                    },
                    "markdown": {
                      "type": "string",
                      "description": "Optional ready-to-render report."
                    }
                  },
                  "additionalProperties": true
                },
                "listings": {
                  "type": "array",
                  "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.85"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.85",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/real-estate/intelligence/bundle",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.85"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/real-estate/intelligence/bundle",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "real-estate",
        "kind": "real-estate-report-bundle",
        "taxonomy": {
          "departmentId": "real-estate",
          "department": "Real Estate",
          "aisleId": "market-intelligence",
          "aisle": "Market Intelligence",
          "shelfId": "market-reports",
          "shelf": "Market Reports",
          "offeringId": "real-estate-market-intelligence-with-listings",
          "offering": "Real Estate Intelligence + Evidence Bundle",
          "pathIds": [
            "real-estate",
            "market-intelligence",
            "market-reports",
            "real-estate-market-intelligence-with-listings"
          ],
          "pathLabels": [
            "Real Estate",
            "Market Intelligence",
            "Market Reports",
            "Real Estate Intelligence + Evidence Bundle"
          ],
          "taxonomyPath": "real-estate.market-intelligence.market-reports.real-estate-market-intelligence-with-listings",
          "layout": {
            "department": {
              "id": "real-estate",
              "name": "Real Estate"
            },
            "aisle": {
              "id": "market-intelligence",
              "name": "Market Intelligence"
            },
            "shelf": {
              "id": "market-reports",
              "name": "Market Reports"
            },
            "offering": {
              "id": "real-estate-market-intelligence-with-listings",
              "name": "Real Estate Intelligence + Evidence Bundle"
            },
            "pathIds": [
              "real-estate",
              "market-intelligence",
              "market-reports",
              "real-estate-market-intelligence-with-listings"
            ],
            "pathLabels": [
              "Real Estate",
              "Market Intelligence",
              "Market Reports",
              "Real Estate Intelligence + Evidence Bundle"
            ]
          }
        },
        "description": {
          "short": "Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.",
          "full": "Purpose: Return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nBest use: Use this when an agent needs return the complete $0.75 real-estate intelligence report plus every normalized listing that passed the requested exact ZIP and min/max price, bedroom, bathroom, square-foot, property-type, and freshness filters, capped at 100 rows. The fixed $0.85 bundle costs less than purchasing the report and enough separate 20-row listing-search calls, while the paid route itself controls evidence access so a request flag cannot obtain bundle data at the report-only price.\nPrice: $0.85 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: conditional by mode.\nRequired combinations: Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.\nOptional fields: market, zipCode, listingType, objective, priceMin, priceMax, bedsMin, bedsMax, bathsMin, bathsMax, sqftMin, sqftMax, homeTypes, propertyType, bedrooms, maxRent, sortBy, daysOnMarket, maxPages, maxListings, shortlistLimit, includeMarkdown.\n\nAccepted fields:\n- market (optional, string): City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided. Constraints: min length: 2; max length: 180.\n- zipCode (optional, string): Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes.\n- listingType (optional, string): Current inventory class to analyze. Historical sold-comparable analysis is not included in this version. Constraints: accepted values: \"for_sale\", \"for_rent\", \"foreclosure\"; default: \"for_sale\".\n- objective (optional, string): Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available. Constraints: accepted values: \"balanced\", \"value\", \"low-price\", \"newest\", \"space\"; default: \"balanced\".\n- priceMin (optional, integer): Minimum listing price in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- priceMax (optional, integer): Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded. Constraints: min: 0.\n- bedsMin (optional, integer): Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bedsMax (optional, integer): Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMin (optional, number): Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- bathsMax (optional, number): Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set. Constraints: min: 0; max: 10.\n- sqftMin (optional, integer): Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- sqftMax (optional, integer): Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set. Constraints: min: 0.\n- homeTypes (optional, array): Optional home-type filters for home-sale searches. Constraints: max items: 7.\n- propertyType (optional, string): Rental property type used for apartment-market reports. Constraints: accepted values: \"apartments\", \"houses\", \"townhomes\", \"condos\".\n- bedrooms (optional, any): Rental bedroom filter used for apartment-market reports.\n- maxRent (optional, integer): Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports. Constraints: min: 0.\n- sortBy (optional, string): Managed-source collection order before AgentBodega computes its own shortlist ranking. Constraints: accepted values: \"newest\", \"relevance\", \"pricea\", \"priced\", \"beds\", \"baths\", \"size\", \"lot\", \"zest\"; default: \"newest\".\n- daysOnMarket (optional, string): Optional maximum listing-age bucket supported by home-sale searches. Constraints: accepted values: \"\", \"1\", \"7\", \"14\", \"30\", \"90\", \"6m\", \"12m\", \"24m\", \"36m\"; default: \"\".\n- maxPages (optional, integer): Maximum rendered result pages for apartment-market reports. Constraints: default: 1; min: 1; max: 2.\n- maxListings (optional, integer): Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report. Constraints: default: 100; min: 10; max: 100.\n- shortlistLimit (optional, integer): Maximum ranked listings to include in the shortlist. Constraints: default: 10; min: 3; max: 15.\n- includeMarkdown (optional, boolean): Include a ready-to-render Markdown version alongside the structured report JSON. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"market\": \"Houston, TX 77008\",\n  \"zipCode\": \"77008\",\n  \"listingType\": \"for_sale\",\n  \"objective\": \"value\",\n  \"priceMin\": 200000,\n  \"priceMax\": 750000,\n  \"bedsMin\": 2,\n  \"bedsMax\": 4,\n  \"bathsMin\": 1.5,\n  \"bathsMax\": 4,\n  \"sqftMin\": 1000,\n  \"sqftMax\": 3500,\n  \"maxListings\": 100,\n  \"shortlistLimit\": 10,\n  \"includeMarkdown\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "market"
              ]
            },
            {
              "required": [
                "zipCode"
              ]
            }
          ],
          "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
          "properties": {
            "market": {
              "type": "string",
              "minLength": 2,
              "maxLength": 180,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
            },
            "objective": {
              "type": "string",
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced",
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Intelligence + Evidence Bundle. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Optional home-type filters for home-sale searches."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used for apartment-market reports."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Optional maximum listing-age bucket supported by home-sale searches."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered result pages for apartment-market reports."
            },
            "maxListings": {
              "type": "integer",
              "minimum": 10,
              "maximum": 100,
              "default": 100,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
            },
            "shortlistLimit": {
              "type": "integer",
              "minimum": 3,
              "maximum": 15,
              "default": 10,
              "description": "Maximum ranked listings to include in the shortlist."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "market"
              ]
            },
            {
              "required": [
                "zipCode"
              ]
            }
          ],
          "description": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route.",
          "properties": {
            "market": {
              "type": "string",
              "minLength": 2,
              "maxLength": 180,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided."
            },
            "zipCode": {
              "type": "string",
              "pattern": "^\\d{5}$",
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            "listingType": {
              "type": "string",
              "enum": [
                "for_sale",
                "for_rent",
                "foreclosure"
              ],
              "default": "for_sale",
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version."
            },
            "objective": {
              "type": "string",
              "enum": [
                "balanced",
                "value",
                "low-price",
                "newest",
                "space"
              ],
              "default": "balanced",
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available."
            },
            "priceMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded."
            },
            "priceMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded."
            },
            "bedsMin": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bedsMax": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set."
            },
            "bathsMin": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "bathsMax": {
              "type": "number",
              "minimum": 0,
              "maximum": 10,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set."
            },
            "sqftMin": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "sqftMax": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set."
            },
            "homeTypes": {
              "type": "array",
              "maxItems": 7,
              "items": {
                "type": "string",
                "enum": [
                  "houses",
                  "townhomes",
                  "multifamily",
                  "condos",
                  "land",
                  "apartments",
                  "manufactured"
                ],
                "description": "Home Types item filter for Real Estate Intelligence + Evidence Bundle. Accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\". Constraints: accepted values: \"houses\", \"townhomes\", \"multifamily\", \"condos\", \"land\", \"apartments\", \"manufactured\"."
              },
              "description": "Optional home-type filters for home-sale searches."
            },
            "propertyType": {
              "type": "string",
              "enum": [
                "apartments",
                "houses",
                "townhomes",
                "condos"
              ],
              "description": "Rental property type used for apartment-market reports."
            },
            "bedrooms": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "any",
                    "studio",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5+"
                  ]
                },
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 5
                }
              ],
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            "maxRent": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports."
            },
            "sortBy": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "pricea",
                "priced",
                "beds",
                "baths",
                "size",
                "lot",
                "zest"
              ],
              "default": "newest",
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking."
            },
            "daysOnMarket": {
              "type": "string",
              "enum": [
                "",
                "1",
                "7",
                "14",
                "30",
                "90",
                "6m",
                "12m",
                "24m",
                "36m"
              ],
              "default": "",
              "description": "Optional maximum listing-age bucket supported by home-sale searches."
            },
            "maxPages": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2,
              "default": 1,
              "description": "Maximum rendered result pages for apartment-market reports."
            },
            "maxListings": {
              "type": "integer",
              "minimum": 10,
              "maximum": 100,
              "default": 100,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report."
            },
            "shortlistLimit": {
              "type": "integer",
              "minimum": 3,
              "maximum": 15,
              "default": 10,
              "description": "Maximum ranked listings to include in the shortlist."
            },
            "includeMarkdown": {
              "type": "boolean",
              "default": true,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "market",
            "zipCode",
            "listingType",
            "objective",
            "priceMin",
            "priceMax",
            "bedsMin",
            "bedsMax",
            "bathsMin",
            "bathsMax",
            "sqftMin",
            "sqftMax",
            "homeTypes",
            "propertyType",
            "bedrooms",
            "maxRent",
            "sortBy",
            "daysOnMarket",
            "maxPages",
            "maxListings",
            "shortlistLimit",
            "includeMarkdown"
          ],
          "fields": [
            {
              "name": "market",
              "type": "string",
              "required": false,
              "description": "City or neighborhood to analyze, such as Houston, TX or Montrose Houston TX. May be omitted when zipCode is provided.",
              "constraints": {
                "minLength": 2,
                "maxLength": 180
              }
            },
            {
              "name": "zipCode",
              "type": "string",
              "required": false,
              "description": "Exact five-digit ZIP to analyze. It narrows collection where supported and excludes returned rows with missing or different postal codes."
            },
            {
              "name": "listingType",
              "type": "string",
              "required": false,
              "description": "Current inventory class to analyze. Historical sold-comparable analysis is not included in this version.",
              "constraints": {
                "enum": [
                  "for_sale",
                  "for_rent",
                  "foreclosure"
                ],
                "default": "for_sale"
              }
            },
            {
              "name": "objective",
              "type": "string",
              "required": false,
              "description": "Ranking objective for the evidence-backed shortlist. balanced combines price, price per square foot, recency, and space when fields are available.",
              "constraints": {
                "enum": [
                  "balanced",
                  "value",
                  "low-price",
                  "newest",
                  "space"
                ],
                "default": "balanced"
              }
            },
            {
              "name": "priceMin",
              "type": "integer",
              "required": false,
              "description": "Minimum listing price in USD. Listings without a verifiable price are excluded.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "priceMax",
              "type": "integer",
              "required": false,
              "description": "Maximum listing price or monthly rent in USD. Listings without a verifiable price are excluded.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "bedsMin",
              "type": "integer",
              "required": false,
              "description": "Minimum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bedsMax",
              "type": "integer",
              "required": false,
              "description": "Maximum bedrooms. Listings without a verifiable bedroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMin",
              "type": "number",
              "required": false,
              "description": "Minimum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "bathsMax",
              "type": "number",
              "required": false,
              "description": "Maximum bathrooms. Listings without a verifiable bathroom count are excluded when this filter is set.",
              "constraints": {
                "minimum": 0,
                "maximum": 10
              }
            },
            {
              "name": "sqftMin",
              "type": "integer",
              "required": false,
              "description": "Minimum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "sqftMax",
              "type": "integer",
              "required": false,
              "description": "Maximum interior square feet. Listings without verifiable square footage are excluded when this filter is set.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "homeTypes",
              "type": "array",
              "required": false,
              "description": "Optional home-type filters for home-sale searches.",
              "constraints": {
                "maxItems": 7
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "propertyType",
              "type": "string",
              "required": false,
              "description": "Rental property type used for apartment-market reports.",
              "constraints": {
                "enum": [
                  "apartments",
                  "houses",
                  "townhomes",
                  "condos"
                ]
              }
            },
            {
              "name": "bedrooms",
              "type": "any",
              "required": false,
              "description": "Rental bedroom filter used for apartment-market reports."
            },
            {
              "name": "maxRent",
              "type": "integer",
              "required": false,
              "description": "Maximum monthly rent in USD. If omitted, priceMax is reused for rental reports.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "sortBy",
              "type": "string",
              "required": false,
              "description": "Managed-source collection order before AgentBodega computes its own shortlist ranking.",
              "constraints": {
                "enum": [
                  "newest",
                  "relevance",
                  "pricea",
                  "priced",
                  "beds",
                  "baths",
                  "size",
                  "lot",
                  "zest"
                ],
                "default": "newest"
              }
            },
            {
              "name": "daysOnMarket",
              "type": "string",
              "required": false,
              "description": "Optional maximum listing-age bucket supported by home-sale searches.",
              "constraints": {
                "enum": [
                  "",
                  "1",
                  "7",
                  "14",
                  "30",
                  "90",
                  "6m",
                  "12m",
                  "24m",
                  "36m"
                ],
                "default": ""
              }
            },
            {
              "name": "maxPages",
              "type": "integer",
              "required": false,
              "description": "Maximum rendered result pages for apartment-market reports.",
              "constraints": {
                "default": 1,
                "minimum": 1,
                "maximum": 2
              }
            },
            {
              "name": "maxListings",
              "type": "integer",
              "required": false,
              "description": "Maximum current listings to ingest before deduplication and verification. At least five usable listings are required for a paid report.",
              "constraints": {
                "default": 100,
                "minimum": 10,
                "maximum": 100
              }
            },
            {
              "name": "shortlistLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum ranked listings to include in the shortlist.",
              "constraints": {
                "default": 10,
                "minimum": 3,
                "maximum": 15
              }
            },
            {
              "name": "includeMarkdown",
              "type": "boolean",
              "required": false,
              "description": "Include a ready-to-render Markdown version alongside the structured report JSON.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "listingType": "for_sale",
            "objective": "value",
            "priceMin": 200000,
            "priceMax": 750000,
            "bedsMin": 2,
            "bedsMax": 4,
            "bathsMin": 1.5,
            "bathsMax": 4,
            "sqftMin": 1000,
            "sqftMax": 3500,
            "maxListings": 100,
            "shortlistLimit": 10,
            "includeMarkdown": true
          },
          "requirements": "Build a current-market report from at least five unique, priced public listings. Provide market, zipCode, or both. The service fetches up to 100 rows, verifies requested filters against normalized fields, and does not settle payment when there is not enough usable evidence. Full analyzed evidence rows are sold only by the fixed-price evidence-bundle route."
        },
        "exampleRequest": {
          "market": "Houston, TX 77008",
          "zipCode": "77008",
          "listingType": "for_sale",
          "objective": "value",
          "priceMin": 200000,
          "priceMax": 750000,
          "bedsMin": 2,
          "bedsMax": 4,
          "bathsMin": 1.5,
          "bathsMax": 4,
          "sqftMin": 1000,
          "sqftMax": 3500,
          "maxListings": 100,
          "shortlistLimit": 10,
          "includeMarkdown": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "report",
            "listings",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True only when enough evidence was collected to deliver the report."
            },
            "tool": {
              "type": "object",
              "description": "AgentBodega product identity and department.",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "description": "Normalized report request and enforced limits.",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "description": "Source-neutral routing and freshness metadata.",
              "additionalProperties": true
            },
            "report": {
              "type": "object",
              "required": [
                "title",
                "executive_summary",
                "insights",
                "sample",
                "benchmarks",
                "price_bands",
                "market_positions",
                "market_signals",
                "segments",
                "decision_lenses",
                "shortlist",
                "outliers",
                "evidence_manifest",
                "data_quality",
                "methodology"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "executive_summary": {
                  "type": "string",
                  "description": "Deterministic summary grounded in the returned sample metrics."
                },
                "insights": {
                  "type": "array",
                  "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                  "items": {
                    "type": "string"
                  }
                },
                "sample": {
                  "type": "object",
                  "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                  "additionalProperties": true
                },
                "benchmarks": {
                  "type": "object",
                  "required": [
                    "list_price_usd",
                    "square_feet",
                    "price_per_sqft_usd",
                    "days_on_market",
                    "bedrooms"
                  ],
                  "properties": {
                    "list_price_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "square_feet": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_per_sqft_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "days_on_market": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "bedrooms": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "price_bands": {
                  "type": "object",
                  "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                  "additionalProperties": true
                },
                "market_positions": {
                  "type": "object",
                  "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                  "additionalProperties": true
                },
                "market_signals": {
                  "type": "object",
                  "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                  "additionalProperties": true
                },
                "segments": {
                  "type": "object",
                  "description": "Inventory groups by home type, postal code, and bedroom count.",
                  "additionalProperties": true
                },
                "decision_lenses": {
                  "type": "object",
                  "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                  "additionalProperties": true
                },
                "shortlist": {
                  "type": "array",
                  "description": "Listings ranked against the requested objective and the current report sample.",
                  "items": {
                    "type": "object",
                    "required": [
                      "rank",
                      "score",
                      "listing_id",
                      "address",
                      "price_usd",
                      "reasons"
                    ],
                    "properties": {
                      "rank": {
                        "type": "integer"
                      },
                      "score": {
                        "type": "number"
                      },
                      "listing_id": {
                        "type": "string"
                      },
                      "address": {
                        "type": "string"
                      },
                      "listing_url": {
                        "type": "string"
                      },
                      "price_usd": {
                        "type": "number"
                      },
                      "beds": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "baths": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "days_on_market": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "cohort": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Context against listings with the same normalized home type and bedroom count.",
                        "additionalProperties": true
                      },
                      "reasons": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "outliers": {
                  "type": "object",
                  "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                  "additionalProperties": true
                },
                "evidence_manifest": {
                  "type": "object",
                  "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                  "additionalProperties": true
                },
                "data_quality": {
                  "type": "object",
                  "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                  "additionalProperties": true
                },
                "methodology": {
                  "type": "object",
                  "description": "Transparent calculation and interpretation boundaries.",
                  "additionalProperties": true
                },
                "markdown": {
                  "type": "string",
                  "description": "Optional ready-to-render report."
                }
              },
              "additionalProperties": true
            },
            "listings": {
              "type": "array",
              "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "source",
            "report",
            "listings",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True only when enough evidence was collected to deliver the report."
            },
            "tool": {
              "type": "object",
              "description": "AgentBodega product identity and department.",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "description": "Normalized report request and enforced limits.",
              "additionalProperties": true
            },
            "source": {
              "type": "object",
              "description": "Source-neutral routing and freshness metadata.",
              "additionalProperties": true
            },
            "report": {
              "type": "object",
              "required": [
                "title",
                "executive_summary",
                "insights",
                "sample",
                "benchmarks",
                "price_bands",
                "market_positions",
                "market_signals",
                "segments",
                "decision_lenses",
                "shortlist",
                "outliers",
                "evidence_manifest",
                "data_quality",
                "methodology"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "executive_summary": {
                  "type": "string",
                  "description": "Deterministic summary grounded in the returned sample metrics."
                },
                "insights": {
                  "type": "array",
                  "description": "Concise evidence-backed observations derived from the current sample without generative inference.",
                  "items": {
                    "type": "string"
                  }
                },
                "sample": {
                  "type": "object",
                  "description": "Raw, duplicate, unique, eligible, and excluded row counts.",
                  "additionalProperties": true
                },
                "benchmarks": {
                  "type": "object",
                  "required": [
                    "list_price_usd",
                    "square_feet",
                    "price_per_sqft_usd",
                    "days_on_market",
                    "bedrooms"
                  ],
                  "properties": {
                    "list_price_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "square_feet": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "price_per_sqft_usd": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "days_on_market": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    },
                    "bedrooms": {
                      "type": "object",
                      "required": [
                        "count",
                        "min",
                        "p25",
                        "median",
                        "mean",
                        "p75",
                        "max"
                      ],
                      "description": "Distribution summary computed from the eligible listing sample.",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Number of listings with a usable value for this metric."
                        },
                        "min": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p25": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "median": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "mean": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "p75": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "max": {
                          "type": [
                            "number",
                            "null"
                          ]
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "price_bands": {
                  "type": "object",
                  "description": "Current inventory split across sample quartile price bands with counts, shares, and USD boundaries.",
                  "additionalProperties": true
                },
                "market_positions": {
                  "type": "object",
                  "description": "Listings grouped by whether price and price per square foot sit above or below current sample medians.",
                  "additionalProperties": true
                },
                "market_signals": {
                  "type": "object",
                  "description": "Counts for below-median value candidates, fresh inventory, older inventory, and supporting field coverage.",
                  "additionalProperties": true
                },
                "segments": {
                  "type": "object",
                  "description": "Inventory groups by home type, postal code, and bedroom count.",
                  "additionalProperties": true
                },
                "decision_lenses": {
                  "type": "object",
                  "description": "Top current-sample candidates under balanced, value, low-price, newest, and space ranking objectives.",
                  "additionalProperties": true
                },
                "shortlist": {
                  "type": "array",
                  "description": "Listings ranked against the requested objective and the current report sample.",
                  "items": {
                    "type": "object",
                    "required": [
                      "rank",
                      "score",
                      "listing_id",
                      "address",
                      "price_usd",
                      "reasons"
                    ],
                    "properties": {
                      "rank": {
                        "type": "integer"
                      },
                      "score": {
                        "type": "number"
                      },
                      "listing_id": {
                        "type": "string"
                      },
                      "address": {
                        "type": "string"
                      },
                      "listing_url": {
                        "type": "string"
                      },
                      "price_usd": {
                        "type": "number"
                      },
                      "beds": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "baths": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "sqft": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_usd": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "days_on_market": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "price_per_sqft_vs_market_pct": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "cohort": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Context against listings with the same normalized home type and bedroom count.",
                        "additionalProperties": true
                      },
                      "reasons": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "outliers": {
                  "type": "object",
                  "description": "Review flags for unusually low or high price and price per square foot using a transparent IQR rule.",
                  "additionalProperties": true
                },
                "evidence_manifest": {
                  "type": "object",
                  "description": "Declares analyzed rows, returned rows, evidence scope, shortlist count, and enforced cap.",
                  "additionalProperties": true
                },
                "data_quality": {
                  "type": "object",
                  "description": "Confidence label, field coverage percentages, warnings, and limitations.",
                  "additionalProperties": true
                },
                "methodology": {
                  "type": "object",
                  "description": "Transparent calculation and interpretation boundaries.",
                  "additionalProperties": true
                },
                "markdown": {
                  "type": "string",
                  "description": "Optional ready-to-render report."
                }
              },
              "additionalProperties": true
            },
            "listings": {
              "type": "array",
              "description": "All normalized analyzed evidence rows only for the fixed-price evidence-bundle route; empty for the report-only route.",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "real-estate-market-intelligence-with-listings",
            "name": "Real Estate Intelligence + Evidence Bundle",
            "department": "Real Estate"
          },
          "requested": {
            "market": "Houston, TX 77008",
            "zipCode": "77008",
            "filters": {
              "zipCode": "77008",
              "priceMin": 200000,
              "priceMax": 750000,
              "bedsMin": 2,
              "bedsMax": 4,
              "bathsMin": 1.5,
              "bathsMax": 4,
              "sqftMin": 1000,
              "sqftMax": 3500
            },
            "inventoryClass": "home-listings",
            "listingType": "for_sale",
            "objective": "value",
            "maxListings": 100,
            "shortlistLimit": 10,
            "evidenceScope": "all-analyzed",
            "includeMarkdown": true,
            "smartScrape": false
          },
          "source": {
            "selected": "managed-public-listings",
            "inventoryClass": "home-listings",
            "routing": "managed-adapter",
            "resultFreshness": "live-run",
            "upstreamDetailsDisclosed": false
          },
          "report": {
            "title": "Houston, TX 77008 Real Estate Market Intelligence",
            "executive_summary": "Analyzed 42 unique current for sale listings for Houston, TX 77008 with complete normalized evidence rows included.",
            "insights": [
              "The middle 50% of observed list prices runs from $389,000 to $675,000, with a median of $525,000."
            ],
            "sample": {
              "raw_count": 50,
              "duplicate_count": 3,
              "unique_count": 47,
              "eligible_count": 42,
              "excluded_count": 5
            },
            "benchmarks": {
              "list_price_usd": {
                "count": 42,
                "min": 239000,
                "p25": 389000,
                "median": 525000,
                "mean": 548120.24,
                "p75": 675000,
                "max": 750000
              }
            },
            "price_bands": {
              "basis": "current sample list price quartiles",
              "observed_count": 42,
              "bands": [
                {
                  "id": "under-p25",
                  "label": "Lower quartile",
                  "count": 11,
                  "share_pct": 26.2,
                  "lower_usd": null,
                  "upper_usd": 389000
                }
              ]
            },
            "market_positions": {
              "basis": {
                "median_price_usd": 525000,
                "median_price_per_sqft_usd": 248
              },
              "observed_count": 39,
              "positions": [
                {
                  "id": "relative-value",
                  "label": "Below both medians",
                  "count": 11,
                  "share_pct": 28.2
                }
              ]
            },
            "market_signals": {
              "below_median_price": {
                "count": 21,
                "share_pct": 50
              }
            },
            "segments": {
              "by_home_type": [
                {
                  "label": "SINGLE_FAMILY",
                  "count": 28,
                  "median_price_usd": 549500
                }
              ]
            },
            "decision_lenses": {
              "value": [
                {
                  "rank": 1,
                  "listing_id": "84007409",
                  "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                  "price_usd": 450000
                }
              ]
            },
            "shortlist": [
              {
                "rank": 1,
                "score": 94.2,
                "listing_id": "84007409",
                "address": "1328 W 23rd St Unit A, Houston, TX 77008",
                "price_usd": 450000,
                "reasons": [
                  "Below both current sample medians"
                ]
              }
            ],
            "outliers": {
              "method": "1.5 x interquartile range review flags",
              "count": 0,
              "listings": []
            },
            "evidence_manifest": {
              "analyzed_listing_count": 42,
              "returned_listing_count": 42,
              "evidence_scope": "all-analyzed",
              "full_listing_rows_included": true,
              "shortlist_count": 10,
              "enforced_max_listing_cap": 100
            },
            "data_quality": {
              "confidence": "high",
              "warnings": [
                "Public listing inventory can change after this snapshot."
              ]
            },
            "methodology": {
              "calculation": "Deterministic descriptive statistics and relative within-sample ranking.",
              "ranking_objective": "value",
              "minimum_usable_listings": 5,
              "historical_trends_included": false,
              "appraisal_or_investment_advice": false
            },
            "markdown": "# Houston, TX 77008 Real Estate Market Intelligence\n\nComplete analyzed evidence included."
          },
          "listings": [
            {
              "listing_id": "84007409",
              "address": "1328 W 23rd St Unit A, Houston, TX 77008",
              "price_usd": 450000,
              "beds": 3,
              "baths": 4,
              "sqft": 2043,
              "price_per_sqft_usd": 220.26
            }
          ],
          "checkedAt": "2026-07-14T00:00:00.000Z"
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/prediction-markets/search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Prediction Market Search",
      "description": "Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.",
      "longDescription": "Purpose: Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nBest use: Use this when an agent needs search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"query\": \"AI agents\",\n  \"category\": \"technology\",\n  \"activeOnly\": true,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```",
      "category": "prediction-markets",
      "kind": "market-search-tool",
      "departmentId": "prediction-markets",
      "department": "Prediction Markets",
      "aisleId": "market-search",
      "aisle": "Market Search",
      "shelfId": "search",
      "shelf": "Search",
      "offeringId": "prediction-market-search",
      "offering": "Prediction Market Search",
      "pathIds": [
        "prediction-markets",
        "market-search",
        "search",
        "prediction-market-search"
      ],
      "pathLabels": [
        "Prediction Markets",
        "Market Search",
        "Search",
        "Prediction Market Search"
      ],
      "taxonomyPath": "prediction-markets.market-search.search.prediction-market-search",
      "layout": {
        "department": {
          "id": "prediction-markets",
          "name": "Prediction Markets"
        },
        "aisle": {
          "id": "market-search",
          "name": "Market Search"
        },
        "shelf": {
          "id": "search",
          "name": "Search"
        },
        "offering": {
          "id": "prediction-market-search",
          "name": "Prediction Market Search"
        },
        "pathIds": [
          "prediction-markets",
          "market-search",
          "search",
          "prediction-market-search"
        ],
        "pathLabels": [
          "Prediction Markets",
          "Market Search",
          "Search",
          "Prediction Market Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "prediction-markets",
        "market-search",
        "markets",
        "events",
        "probabilities",
        "public-data",
        "research",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 160,
            "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
          },
          "venue": {
            "type": "string",
            "enum": [
              "managed",
              "polymarket"
            ],
            "default": "managed",
            "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
          },
          "activeOnly": {
            "type": "boolean",
            "default": true,
            "description": "When true, return currently active, unresolved markets only."
          },
          "closed": {
            "type": "boolean",
            "default": false,
            "description": "Set true only when historical or resolved markets are acceptable."
          },
          "category": {
            "type": "string",
            "maxLength": 80,
            "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 25,
            "default": 10,
            "description": "Maximum normalized market rows to return."
          },
          "sort": {
            "type": "string",
            "enum": [
              "volume_desc",
              "liquidity_desc",
              "newest",
              "ending_soon"
            ],
            "default": "volume_desc",
            "description": "Sort order for returned markets."
          },
          "includeRules": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include capped market rule or description text."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "venue",
          "activeOnly",
          "closed",
          "category",
          "limit",
          "sort",
          "includeRules"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "venue",
            "type": "string",
            "required": false,
            "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
            "constraints": {
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed"
            }
          },
          {
            "name": "activeOnly",
            "type": "boolean",
            "required": false,
            "description": "When true, return currently active, unresolved markets only.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "closed",
            "type": "boolean",
            "required": false,
            "description": "Set true only when historical or resolved markets are acceptable.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "category",
            "type": "string",
            "required": false,
            "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum normalized market rows to return.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 25
            }
          },
          {
            "name": "sort",
            "type": "string",
            "required": false,
            "description": "Sort order for returned markets.",
            "constraints": {
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc"
            }
          },
          {
            "name": "includeRules",
            "type": "boolean",
            "required": false,
            "description": "Set true to include capped market rule or description text.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "AI agents",
          "category": "technology",
          "activeOnly": true,
          "limit": 10,
          "sort": "volume_desc",
          "includeRules": false
        }
      },
      "exampleRequest": {
        "query": "AI agents",
        "category": "technology",
        "activeOnly": true,
        "limit": 10,
        "sort": "volume_desc",
        "includeRules": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "marketFeed",
          "count",
          "markets",
          "limits",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True when the market search completed."
          },
          "tool": {
            "type": "object",
            "additionalProperties": true,
            "description": "AgentBodega tool metadata."
          },
          "requested": {
            "type": "object",
            "additionalProperties": true,
            "description": "Normalized filters and caps."
          },
          "marketFeed": {
            "type": "object",
            "additionalProperties": true,
            "description": "Provider-neutral feed metadata and public-data boundary."
          },
          "count": {
            "type": "integer",
            "description": "Number of normalized market rows returned."
          },
          "markets": {
            "type": "array",
            "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable market id."
                },
                "slug": {
                  "type": "string",
                  "description": "Stable market slug when available."
                },
                "title": {
                  "type": "string",
                  "description": "Market question or title."
                },
                "url": {
                  "type": "string",
                  "description": "Public market URL when available."
                },
                "venue": {
                  "type": "string",
                  "description": "Normalized venue label."
                },
                "active": {
                  "type": "boolean",
                  "description": "Whether the market is active."
                },
                "closed": {
                  "type": "boolean",
                  "description": "Whether the market is closed or resolved."
                },
                "endsAt": {
                  "type": "string",
                  "description": "Market end timestamp when available."
                },
                "volume": {
                  "type": "number",
                  "description": "Reported all-time volume when available."
                },
                "liquidity": {
                  "type": "number",
                  "description": "Reported liquidity when available."
                },
                "outcomes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "description": "Outcome labels and implied prices when available."
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Normalized category, event, or tag labels."
                },
                "rules": {
                  "type": "string",
                  "description": "Optional capped rules/description text when includeRules is true."
                }
              },
              "additionalProperties": true
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true,
            "description": "Published caps for this route."
          },
          "checkedAt": {
            "type": "string",
            "description": "Server-side ISO timestamp."
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "marketFeed": {
          "type": "managed-prediction-market-feed",
          "readOnly": true,
          "noTradeExecution": true
        },
        "count": 1,
        "markets": [
          {
            "title": "Will example event happen?",
            "outcomes": [
              {
                "label": "Yes",
                "price": 0.42
              },
              {
                "label": "No",
                "price": 0.58
              }
            ],
            "volume": 125000,
            "liquidity": 32000
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "AI agents",
                "category": "technology",
                "activeOnly": true,
                "limit": 10,
                "sort": "volume_desc",
                "includeRules": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "marketFeed": {
                  "type": "managed-prediction-market-feed",
                  "readOnly": true,
                  "noTradeExecution": true
                },
                "count": 1,
                "markets": [
                  {
                    "title": "Will example event happen?",
                    "outcomes": [
                      {
                        "label": "Yes",
                        "price": 0.42
                      },
                      {
                        "label": "No",
                        "price": 0.58
                      }
                    ],
                    "volume": 125000,
                    "liquidity": 32000
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/prediction-markets/search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
                      },
                      "venue": {
                        "type": "string",
                        "enum": [
                          "managed",
                          "polymarket"
                        ],
                        "default": "managed",
                        "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
                      },
                      "activeOnly": {
                        "type": "boolean",
                        "default": true,
                        "description": "When true, return currently active, unresolved markets only."
                      },
                      "closed": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true only when historical or resolved markets are acceptable."
                      },
                      "category": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 25,
                        "default": 10,
                        "description": "Maximum normalized market rows to return."
                      },
                      "sort": {
                        "type": "string",
                        "enum": [
                          "volume_desc",
                          "liquidity_desc",
                          "newest",
                          "ending_soon"
                        ],
                        "default": "volume_desc",
                        "description": "Sort order for returned markets."
                      },
                      "includeRules": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include capped market rule or description text."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "marketFeed",
                      "count",
                      "markets",
                      "limits",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True when the market search completed."
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "AgentBodega tool metadata."
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Normalized filters and caps."
                      },
                      "marketFeed": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Provider-neutral feed metadata and public-data boundary."
                      },
                      "count": {
                        "type": "integer",
                        "description": "Number of normalized market rows returned."
                      },
                      "markets": {
                        "type": "array",
                        "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "description": "Stable market id."
                            },
                            "slug": {
                              "type": "string",
                              "description": "Stable market slug when available."
                            },
                            "title": {
                              "type": "string",
                              "description": "Market question or title."
                            },
                            "url": {
                              "type": "string",
                              "description": "Public market URL when available."
                            },
                            "venue": {
                              "type": "string",
                              "description": "Normalized venue label."
                            },
                            "active": {
                              "type": "boolean",
                              "description": "Whether the market is active."
                            },
                            "closed": {
                              "type": "boolean",
                              "description": "Whether the market is closed or resolved."
                            },
                            "endsAt": {
                              "type": "string",
                              "description": "Market end timestamp when available."
                            },
                            "volume": {
                              "type": "number",
                              "description": "Reported all-time volume when available."
                            },
                            "liquidity": {
                              "type": "number",
                              "description": "Reported liquidity when available."
                            },
                            "outcomes": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "additionalProperties": true
                              },
                              "description": "Outcome labels and implied prices when available."
                            },
                            "categories": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "description": "Normalized category, event, or tag labels."
                            },
                            "rules": {
                              "type": "string",
                              "description": "Optional capped rules/description text when includeRules is true."
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Published caps for this route."
                      },
                      "checkedAt": {
                        "type": "string",
                        "description": "Server-side ISO timestamp."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "prediction-market-search",
            "url": "https://agentbodega.store/api/prediction-markets/search",
            "method": "POST",
            "description": "Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.",
            "longDescription": "Purpose: Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nBest use: Use this when an agent needs search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"query\": \"AI agents\",\n  \"category\": \"technology\",\n  \"activeOnly\": true,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Prediction Market Search",
            "category": "prediction-markets",
            "kind": "market-search-tool",
            "tags": [
              "prediction-markets",
              "market-search",
              "markets",
              "events",
              "probabilities",
              "public-data",
              "research",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "venue",
                "activeOnly",
                "closed",
                "category",
                "limit",
                "sort",
                "includeRules"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "venue",
                  "type": "string",
                  "required": false,
                  "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
                  "constraints": {
                    "enum": [
                      "managed",
                      "polymarket"
                    ],
                    "default": "managed"
                  }
                },
                {
                  "name": "activeOnly",
                  "type": "boolean",
                  "required": false,
                  "description": "When true, return currently active, unresolved markets only.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "closed",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true only when historical or resolved markets are acceptable.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "category",
                  "type": "string",
                  "required": false,
                  "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum normalized market rows to return.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 25
                  }
                },
                {
                  "name": "sort",
                  "type": "string",
                  "required": false,
                  "description": "Sort order for returned markets.",
                  "constraints": {
                    "enum": [
                      "volume_desc",
                      "liquidity_desc",
                      "newest",
                      "ending_soon"
                    ],
                    "default": "volume_desc"
                  }
                },
                {
                  "name": "includeRules",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include capped market rule or description text.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "AI agents",
                "category": "technology",
                "activeOnly": true,
                "limit": 10,
                "sort": "volume_desc",
                "includeRules": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "query": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
                },
                "venue": {
                  "type": "string",
                  "enum": [
                    "managed",
                    "polymarket"
                  ],
                  "default": "managed",
                  "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
                },
                "activeOnly": {
                  "type": "boolean",
                  "default": true,
                  "description": "When true, return currently active, unresolved markets only."
                },
                "closed": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true only when historical or resolved markets are acceptable."
                },
                "category": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 25,
                  "default": 10,
                  "description": "Maximum normalized market rows to return."
                },
                "sort": {
                  "type": "string",
                  "enum": [
                    "volume_desc",
                    "liquidity_desc",
                    "newest",
                    "ending_soon"
                  ],
                  "default": "volume_desc",
                  "description": "Sort order for returned markets."
                },
                "includeRules": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include capped market rule or description text."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "marketFeed",
                "count",
                "markets",
                "limits",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True when the market search completed."
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "AgentBodega tool metadata."
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Normalized filters and caps."
                },
                "marketFeed": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Provider-neutral feed metadata and public-data boundary."
                },
                "count": {
                  "type": "integer",
                  "description": "Number of normalized market rows returned."
                },
                "markets": {
                  "type": "array",
                  "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Stable market id."
                      },
                      "slug": {
                        "type": "string",
                        "description": "Stable market slug when available."
                      },
                      "title": {
                        "type": "string",
                        "description": "Market question or title."
                      },
                      "url": {
                        "type": "string",
                        "description": "Public market URL when available."
                      },
                      "venue": {
                        "type": "string",
                        "description": "Normalized venue label."
                      },
                      "active": {
                        "type": "boolean",
                        "description": "Whether the market is active."
                      },
                      "closed": {
                        "type": "boolean",
                        "description": "Whether the market is closed or resolved."
                      },
                      "endsAt": {
                        "type": "string",
                        "description": "Market end timestamp when available."
                      },
                      "volume": {
                        "type": "number",
                        "description": "Reported all-time volume when available."
                      },
                      "liquidity": {
                        "type": "number",
                        "description": "Reported liquidity when available."
                      },
                      "outcomes": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        },
                        "description": "Outcome labels and implied prices when available."
                      },
                      "categories": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "Normalized category, event, or tag labels."
                      },
                      "rules": {
                        "type": "string",
                        "description": "Optional capped rules/description text when includeRules is true."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Published caps for this route."
                },
                "checkedAt": {
                  "type": "string",
                  "description": "Server-side ISO timestamp."
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/prediction-markets/search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/prediction-markets/search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "prediction-markets",
        "kind": "market-search-tool",
        "taxonomy": {
          "departmentId": "prediction-markets",
          "department": "Prediction Markets",
          "aisleId": "market-search",
          "aisle": "Market Search",
          "shelfId": "search",
          "shelf": "Search",
          "offeringId": "prediction-market-search",
          "offering": "Prediction Market Search",
          "pathIds": [
            "prediction-markets",
            "market-search",
            "search",
            "prediction-market-search"
          ],
          "pathLabels": [
            "Prediction Markets",
            "Market Search",
            "Search",
            "Prediction Market Search"
          ],
          "taxonomyPath": "prediction-markets.market-search.search.prediction-market-search",
          "layout": {
            "department": {
              "id": "prediction-markets",
              "name": "Prediction Markets"
            },
            "aisle": {
              "id": "market-search",
              "name": "Market Search"
            },
            "shelf": {
              "id": "search",
              "name": "Search"
            },
            "offering": {
              "id": "prediction-market-search",
              "name": "Prediction Market Search"
            },
            "pathIds": [
              "prediction-markets",
              "market-search",
              "search",
              "prediction-market-search"
            ],
            "pathLabels": [
              "Prediction Markets",
              "Market Search",
              "Search",
              "Prediction Market Search"
            ]
          }
        },
        "description": {
          "short": "Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.",
          "full": "Purpose: Search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nBest use: Use this when an agent needs search active or historical public prediction markets by keyword, category, venue, liquidity, volume, and end date; returns normalized read-only market rows with outcomes, prices, and source-neutral feed metadata.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"query\": \"AI agents\",\n  \"category\": \"technology\",\n  \"activeOnly\": true,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
            },
            "venue": {
              "type": "string",
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed",
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
            },
            "activeOnly": {
              "type": "boolean",
              "default": true,
              "description": "When true, return currently active, unresolved markets only."
            },
            "closed": {
              "type": "boolean",
              "default": false,
              "description": "Set true only when historical or resolved markets are acceptable."
            },
            "category": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 10,
              "description": "Maximum normalized market rows to return."
            },
            "sort": {
              "type": "string",
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc",
              "description": "Sort order for returned markets."
            },
            "includeRules": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include capped market rule or description text."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
            },
            "venue": {
              "type": "string",
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed",
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
            },
            "activeOnly": {
              "type": "boolean",
              "default": true,
              "description": "When true, return currently active, unresolved markets only."
            },
            "closed": {
              "type": "boolean",
              "default": false,
              "description": "Set true only when historical or resolved markets are acceptable."
            },
            "category": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 10,
              "description": "Maximum normalized market rows to return."
            },
            "sort": {
              "type": "string",
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc",
              "description": "Sort order for returned markets."
            },
            "includeRules": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include capped market rule or description text."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "venue",
            "activeOnly",
            "closed",
            "category",
            "limit",
            "sort",
            "includeRules"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "venue",
              "type": "string",
              "required": false,
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
              "constraints": {
                "enum": [
                  "managed",
                  "polymarket"
                ],
                "default": "managed"
              }
            },
            {
              "name": "activeOnly",
              "type": "boolean",
              "required": false,
              "description": "When true, return currently active, unresolved markets only.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "closed",
              "type": "boolean",
              "required": false,
              "description": "Set true only when historical or resolved markets are acceptable.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "category",
              "type": "string",
              "required": false,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum normalized market rows to return.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 25
              }
            },
            {
              "name": "sort",
              "type": "string",
              "required": false,
              "description": "Sort order for returned markets.",
              "constraints": {
                "enum": [
                  "volume_desc",
                  "liquidity_desc",
                  "newest",
                  "ending_soon"
                ],
                "default": "volume_desc"
              }
            },
            {
              "name": "includeRules",
              "type": "boolean",
              "required": false,
              "description": "Set true to include capped market rule or description text.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "AI agents",
            "category": "technology",
            "activeOnly": true,
            "limit": 10,
            "sort": "volume_desc",
            "includeRules": false
          }
        },
        "exampleRequest": {
          "query": "AI agents",
          "category": "technology",
          "activeOnly": true,
          "limit": 10,
          "sort": "volume_desc",
          "includeRules": false
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "marketFeed",
            "count",
            "markets",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the market search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized filters and caps."
            },
            "marketFeed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Provider-neutral feed metadata and public-data boundary."
            },
            "count": {
              "type": "integer",
              "description": "Number of normalized market rows returned."
            },
            "markets": {
              "type": "array",
              "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable market id."
                  },
                  "slug": {
                    "type": "string",
                    "description": "Stable market slug when available."
                  },
                  "title": {
                    "type": "string",
                    "description": "Market question or title."
                  },
                  "url": {
                    "type": "string",
                    "description": "Public market URL when available."
                  },
                  "venue": {
                    "type": "string",
                    "description": "Normalized venue label."
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Whether the market is active."
                  },
                  "closed": {
                    "type": "boolean",
                    "description": "Whether the market is closed or resolved."
                  },
                  "endsAt": {
                    "type": "string",
                    "description": "Market end timestamp when available."
                  },
                  "volume": {
                    "type": "number",
                    "description": "Reported all-time volume when available."
                  },
                  "liquidity": {
                    "type": "number",
                    "description": "Reported liquidity when available."
                  },
                  "outcomes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Outcome labels and implied prices when available."
                  },
                  "categories": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Normalized category, event, or tag labels."
                  },
                  "rules": {
                    "type": "string",
                    "description": "Optional capped rules/description text when includeRules is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp."
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "marketFeed",
            "count",
            "markets",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the market search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized filters and caps."
            },
            "marketFeed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Provider-neutral feed metadata and public-data boundary."
            },
            "count": {
              "type": "integer",
              "description": "Number of normalized market rows returned."
            },
            "markets": {
              "type": "array",
              "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable market id."
                  },
                  "slug": {
                    "type": "string",
                    "description": "Stable market slug when available."
                  },
                  "title": {
                    "type": "string",
                    "description": "Market question or title."
                  },
                  "url": {
                    "type": "string",
                    "description": "Public market URL when available."
                  },
                  "venue": {
                    "type": "string",
                    "description": "Normalized venue label."
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Whether the market is active."
                  },
                  "closed": {
                    "type": "boolean",
                    "description": "Whether the market is closed or resolved."
                  },
                  "endsAt": {
                    "type": "string",
                    "description": "Market end timestamp when available."
                  },
                  "volume": {
                    "type": "number",
                    "description": "Reported all-time volume when available."
                  },
                  "liquidity": {
                    "type": "number",
                    "description": "Reported liquidity when available."
                  },
                  "outcomes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Outcome labels and implied prices when available."
                  },
                  "categories": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Normalized category, event, or tag labels."
                  },
                  "rules": {
                    "type": "string",
                    "description": "Optional capped rules/description text when includeRules is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp."
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "marketFeed": {
            "type": "managed-prediction-market-feed",
            "readOnly": true,
            "noTradeExecution": true
          },
          "count": 1,
          "markets": [
            {
              "title": "Will example event happen?",
              "outcomes": [
                {
                  "label": "Yes",
                  "price": 0.42
                },
                {
                  "label": "No",
                  "price": 0.58
                }
              ],
              "volume": 125000,
              "liquidity": 32000
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/prediction-markets/listings",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Prediction Market Listings",
      "description": "Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.",
      "longDescription": "Purpose: Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nBest use: Use this when an agent needs return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"activeOnly\": true,\n  \"closed\": false,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```",
      "category": "prediction-markets",
      "kind": "market-listings-tool",
      "departmentId": "prediction-markets",
      "department": "Prediction Markets",
      "aisleId": "market-search",
      "aisle": "Market Search",
      "shelfId": "active-listings",
      "shelf": "Active Listings",
      "offeringId": "prediction-market-listings",
      "offering": "Prediction Market Listings",
      "pathIds": [
        "prediction-markets",
        "market-search",
        "active-listings",
        "prediction-market-listings"
      ],
      "pathLabels": [
        "Prediction Markets",
        "Market Search",
        "Active Listings",
        "Prediction Market Listings"
      ],
      "taxonomyPath": "prediction-markets.market-search.active-listings.prediction-market-listings",
      "layout": {
        "department": {
          "id": "prediction-markets",
          "name": "Prediction Markets"
        },
        "aisle": {
          "id": "market-search",
          "name": "Market Search"
        },
        "shelf": {
          "id": "active-listings",
          "name": "Active Listings"
        },
        "offering": {
          "id": "prediction-market-listings",
          "name": "Prediction Market Listings"
        },
        "pathIds": [
          "prediction-markets",
          "market-search",
          "active-listings",
          "prediction-market-listings"
        ],
        "pathLabels": [
          "Prediction Markets",
          "Market Search",
          "Active Listings",
          "Prediction Market Listings"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "prediction-markets",
        "market-listings",
        "markets",
        "events",
        "probabilities",
        "public-data",
        "research",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 160,
            "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
          },
          "venue": {
            "type": "string",
            "enum": [
              "managed",
              "polymarket"
            ],
            "default": "managed",
            "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
          },
          "activeOnly": {
            "type": "boolean",
            "default": true,
            "description": "When true, return currently active, unresolved markets only."
          },
          "closed": {
            "type": "boolean",
            "default": false,
            "description": "Set true only when historical or resolved markets are acceptable."
          },
          "category": {
            "type": "string",
            "maxLength": 80,
            "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 25,
            "default": 10,
            "description": "Maximum normalized market rows to return."
          },
          "sort": {
            "type": "string",
            "enum": [
              "volume_desc",
              "liquidity_desc",
              "newest",
              "ending_soon"
            ],
            "default": "volume_desc",
            "description": "Sort order for returned markets."
          },
          "includeRules": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include capped market rule or description text."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "venue",
          "activeOnly",
          "closed",
          "category",
          "limit",
          "sort",
          "includeRules"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "venue",
            "type": "string",
            "required": false,
            "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
            "constraints": {
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed"
            }
          },
          {
            "name": "activeOnly",
            "type": "boolean",
            "required": false,
            "description": "When true, return currently active, unresolved markets only.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "closed",
            "type": "boolean",
            "required": false,
            "description": "Set true only when historical or resolved markets are acceptable.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "category",
            "type": "string",
            "required": false,
            "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum normalized market rows to return.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 25
            }
          },
          {
            "name": "sort",
            "type": "string",
            "required": false,
            "description": "Sort order for returned markets.",
            "constraints": {
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc"
            }
          },
          {
            "name": "includeRules",
            "type": "boolean",
            "required": false,
            "description": "Set true to include capped market rule or description text.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "activeOnly": true,
          "closed": false,
          "limit": 10,
          "sort": "volume_desc",
          "includeRules": false
        }
      },
      "exampleRequest": {
        "activeOnly": true,
        "closed": false,
        "limit": 10,
        "sort": "volume_desc",
        "includeRules": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "marketFeed",
          "count",
          "markets",
          "limits",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True when the market search completed."
          },
          "tool": {
            "type": "object",
            "additionalProperties": true,
            "description": "AgentBodega tool metadata."
          },
          "requested": {
            "type": "object",
            "additionalProperties": true,
            "description": "Normalized filters and caps."
          },
          "marketFeed": {
            "type": "object",
            "additionalProperties": true,
            "description": "Provider-neutral feed metadata and public-data boundary."
          },
          "count": {
            "type": "integer",
            "description": "Number of normalized market rows returned."
          },
          "markets": {
            "type": "array",
            "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable market id."
                },
                "slug": {
                  "type": "string",
                  "description": "Stable market slug when available."
                },
                "title": {
                  "type": "string",
                  "description": "Market question or title."
                },
                "url": {
                  "type": "string",
                  "description": "Public market URL when available."
                },
                "venue": {
                  "type": "string",
                  "description": "Normalized venue label."
                },
                "active": {
                  "type": "boolean",
                  "description": "Whether the market is active."
                },
                "closed": {
                  "type": "boolean",
                  "description": "Whether the market is closed or resolved."
                },
                "endsAt": {
                  "type": "string",
                  "description": "Market end timestamp when available."
                },
                "volume": {
                  "type": "number",
                  "description": "Reported all-time volume when available."
                },
                "liquidity": {
                  "type": "number",
                  "description": "Reported liquidity when available."
                },
                "outcomes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "description": "Outcome labels and implied prices when available."
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Normalized category, event, or tag labels."
                },
                "rules": {
                  "type": "string",
                  "description": "Optional capped rules/description text when includeRules is true."
                }
              },
              "additionalProperties": true
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true,
            "description": "Published caps for this route."
          },
          "checkedAt": {
            "type": "string",
            "description": "Server-side ISO timestamp."
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "marketFeed": {
          "type": "managed-prediction-market-feed",
          "readOnly": true,
          "noTradeExecution": true
        },
        "count": 1,
        "markets": [
          {
            "title": "Top active example market",
            "outcomes": [
              {
                "label": "Yes",
                "price": 0.61
              },
              {
                "label": "No",
                "price": 0.39
              }
            ],
            "volume": 250000,
            "liquidity": 48000
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "activeOnly": true,
                "closed": false,
                "limit": 10,
                "sort": "volume_desc",
                "includeRules": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "marketFeed": {
                  "type": "managed-prediction-market-feed",
                  "readOnly": true,
                  "noTradeExecution": true
                },
                "count": 1,
                "markets": [
                  {
                    "title": "Top active example market",
                    "outcomes": [
                      {
                        "label": "Yes",
                        "price": 0.61
                      },
                      {
                        "label": "No",
                        "price": 0.39
                      }
                    ],
                    "volume": 250000,
                    "liquidity": 48000
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/prediction-markets/listings",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
                      },
                      "venue": {
                        "type": "string",
                        "enum": [
                          "managed",
                          "polymarket"
                        ],
                        "default": "managed",
                        "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
                      },
                      "activeOnly": {
                        "type": "boolean",
                        "default": true,
                        "description": "When true, return currently active, unresolved markets only."
                      },
                      "closed": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true only when historical or resolved markets are acceptable."
                      },
                      "category": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 25,
                        "default": 10,
                        "description": "Maximum normalized market rows to return."
                      },
                      "sort": {
                        "type": "string",
                        "enum": [
                          "volume_desc",
                          "liquidity_desc",
                          "newest",
                          "ending_soon"
                        ],
                        "default": "volume_desc",
                        "description": "Sort order for returned markets."
                      },
                      "includeRules": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include capped market rule or description text."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "marketFeed",
                      "count",
                      "markets",
                      "limits",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True when the market search completed."
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "AgentBodega tool metadata."
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Normalized filters and caps."
                      },
                      "marketFeed": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Provider-neutral feed metadata and public-data boundary."
                      },
                      "count": {
                        "type": "integer",
                        "description": "Number of normalized market rows returned."
                      },
                      "markets": {
                        "type": "array",
                        "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "description": "Stable market id."
                            },
                            "slug": {
                              "type": "string",
                              "description": "Stable market slug when available."
                            },
                            "title": {
                              "type": "string",
                              "description": "Market question or title."
                            },
                            "url": {
                              "type": "string",
                              "description": "Public market URL when available."
                            },
                            "venue": {
                              "type": "string",
                              "description": "Normalized venue label."
                            },
                            "active": {
                              "type": "boolean",
                              "description": "Whether the market is active."
                            },
                            "closed": {
                              "type": "boolean",
                              "description": "Whether the market is closed or resolved."
                            },
                            "endsAt": {
                              "type": "string",
                              "description": "Market end timestamp when available."
                            },
                            "volume": {
                              "type": "number",
                              "description": "Reported all-time volume when available."
                            },
                            "liquidity": {
                              "type": "number",
                              "description": "Reported liquidity when available."
                            },
                            "outcomes": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "additionalProperties": true
                              },
                              "description": "Outcome labels and implied prices when available."
                            },
                            "categories": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "description": "Normalized category, event, or tag labels."
                            },
                            "rules": {
                              "type": "string",
                              "description": "Optional capped rules/description text when includeRules is true."
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Published caps for this route."
                      },
                      "checkedAt": {
                        "type": "string",
                        "description": "Server-side ISO timestamp."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "prediction-market-listings",
            "url": "https://agentbodega.store/api/prediction-markets/listings",
            "method": "POST",
            "description": "Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.",
            "longDescription": "Purpose: Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nBest use: Use this when an agent needs return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"activeOnly\": true,\n  \"closed\": false,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Prediction Market Listings",
            "category": "prediction-markets",
            "kind": "market-listings-tool",
            "tags": [
              "prediction-markets",
              "market-listings",
              "markets",
              "events",
              "probabilities",
              "public-data",
              "research",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "venue",
                "activeOnly",
                "closed",
                "category",
                "limit",
                "sort",
                "includeRules"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "venue",
                  "type": "string",
                  "required": false,
                  "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
                  "constraints": {
                    "enum": [
                      "managed",
                      "polymarket"
                    ],
                    "default": "managed"
                  }
                },
                {
                  "name": "activeOnly",
                  "type": "boolean",
                  "required": false,
                  "description": "When true, return currently active, unresolved markets only.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "closed",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true only when historical or resolved markets are acceptable.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "category",
                  "type": "string",
                  "required": false,
                  "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum normalized market rows to return.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 25
                  }
                },
                {
                  "name": "sort",
                  "type": "string",
                  "required": false,
                  "description": "Sort order for returned markets.",
                  "constraints": {
                    "enum": [
                      "volume_desc",
                      "liquidity_desc",
                      "newest",
                      "ending_soon"
                    ],
                    "default": "volume_desc"
                  }
                },
                {
                  "name": "includeRules",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include capped market rule or description text.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "activeOnly": true,
                "closed": false,
                "limit": 10,
                "sort": "volume_desc",
                "includeRules": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "query": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
                },
                "venue": {
                  "type": "string",
                  "enum": [
                    "managed",
                    "polymarket"
                  ],
                  "default": "managed",
                  "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
                },
                "activeOnly": {
                  "type": "boolean",
                  "default": true,
                  "description": "When true, return currently active, unresolved markets only."
                },
                "closed": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true only when historical or resolved markets are acceptable."
                },
                "category": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 25,
                  "default": 10,
                  "description": "Maximum normalized market rows to return."
                },
                "sort": {
                  "type": "string",
                  "enum": [
                    "volume_desc",
                    "liquidity_desc",
                    "newest",
                    "ending_soon"
                  ],
                  "default": "volume_desc",
                  "description": "Sort order for returned markets."
                },
                "includeRules": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include capped market rule or description text."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "marketFeed",
                "count",
                "markets",
                "limits",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True when the market search completed."
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "AgentBodega tool metadata."
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Normalized filters and caps."
                },
                "marketFeed": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Provider-neutral feed metadata and public-data boundary."
                },
                "count": {
                  "type": "integer",
                  "description": "Number of normalized market rows returned."
                },
                "markets": {
                  "type": "array",
                  "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Stable market id."
                      },
                      "slug": {
                        "type": "string",
                        "description": "Stable market slug when available."
                      },
                      "title": {
                        "type": "string",
                        "description": "Market question or title."
                      },
                      "url": {
                        "type": "string",
                        "description": "Public market URL when available."
                      },
                      "venue": {
                        "type": "string",
                        "description": "Normalized venue label."
                      },
                      "active": {
                        "type": "boolean",
                        "description": "Whether the market is active."
                      },
                      "closed": {
                        "type": "boolean",
                        "description": "Whether the market is closed or resolved."
                      },
                      "endsAt": {
                        "type": "string",
                        "description": "Market end timestamp when available."
                      },
                      "volume": {
                        "type": "number",
                        "description": "Reported all-time volume when available."
                      },
                      "liquidity": {
                        "type": "number",
                        "description": "Reported liquidity when available."
                      },
                      "outcomes": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        },
                        "description": "Outcome labels and implied prices when available."
                      },
                      "categories": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "Normalized category, event, or tag labels."
                      },
                      "rules": {
                        "type": "string",
                        "description": "Optional capped rules/description text when includeRules is true."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Published caps for this route."
                },
                "checkedAt": {
                  "type": "string",
                  "description": "Server-side ISO timestamp."
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/prediction-markets/listings",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/prediction-markets/listings",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "prediction-markets",
        "kind": "market-listings-tool",
        "taxonomy": {
          "departmentId": "prediction-markets",
          "department": "Prediction Markets",
          "aisleId": "market-search",
          "aisle": "Market Search",
          "shelfId": "active-listings",
          "shelf": "Active Listings",
          "offeringId": "prediction-market-listings",
          "offering": "Prediction Market Listings",
          "pathIds": [
            "prediction-markets",
            "market-search",
            "active-listings",
            "prediction-market-listings"
          ],
          "pathLabels": [
            "Prediction Markets",
            "Market Search",
            "Active Listings",
            "Prediction Market Listings"
          ],
          "taxonomyPath": "prediction-markets.market-search.active-listings.prediction-market-listings",
          "layout": {
            "department": {
              "id": "prediction-markets",
              "name": "Prediction Markets"
            },
            "aisle": {
              "id": "market-search",
              "name": "Market Search"
            },
            "shelf": {
              "id": "active-listings",
              "name": "Active Listings"
            },
            "offering": {
              "id": "prediction-market-listings",
              "name": "Prediction Market Listings"
            },
            "pathIds": [
              "prediction-markets",
              "market-search",
              "active-listings",
              "prediction-market-listings"
            ],
            "pathLabels": [
              "Prediction Markets",
              "Market Search",
              "Active Listings",
              "Prediction Market Listings"
            ]
          }
        },
        "description": {
          "short": "Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.",
          "full": "Purpose: Return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nBest use: Use this when an agent needs return fresh public prediction-market listings sorted by volume, liquidity, newest, or ending soon with capped rows, normalized outcomes, category labels, and no trade execution.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, venue, activeOnly, closed, category, limit, sort, includeRules.\n\nAccepted fields:\n- query (optional, string): Optional text filter matched against market title, slug, description, outcomes, and category labels. Constraints: max length: 160.\n- venue (optional, string): Venue selector. Use managed for AgentBodega's normalized market feed. Constraints: accepted values: \"managed\", \"polymarket\"; default: \"managed\".\n- activeOnly (optional, boolean): When true, return currently active, unresolved markets only. Constraints: default: true.\n- closed (optional, boolean): Set true only when historical or resolved markets are acceptable. Constraints: default: false.\n- category (optional, string): Optional category, event, or tag filter when the caller wants a narrower market family. Constraints: max length: 80.\n- limit (optional, integer): Maximum normalized market rows to return. Constraints: default: 10; min: 1; max: 25.\n- sort (optional, string): Sort order for returned markets. Constraints: accepted values: \"volume_desc\", \"liquidity_desc\", \"newest\", \"ending_soon\"; default: \"volume_desc\".\n- includeRules (optional, boolean): Set true to include capped market rule or description text. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"activeOnly\": true,\n  \"closed\": false,\n  \"limit\": 10,\n  \"sort\": \"volume_desc\",\n  \"includeRules\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
            },
            "venue": {
              "type": "string",
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed",
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
            },
            "activeOnly": {
              "type": "boolean",
              "default": true,
              "description": "When true, return currently active, unresolved markets only."
            },
            "closed": {
              "type": "boolean",
              "default": false,
              "description": "Set true only when historical or resolved markets are acceptable."
            },
            "category": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 10,
              "description": "Maximum normalized market rows to return."
            },
            "sort": {
              "type": "string",
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc",
              "description": "Sort order for returned markets."
            },
            "includeRules": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include capped market rule or description text."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels."
            },
            "venue": {
              "type": "string",
              "enum": [
                "managed",
                "polymarket"
              ],
              "default": "managed",
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed."
            },
            "activeOnly": {
              "type": "boolean",
              "default": true,
              "description": "When true, return currently active, unresolved markets only."
            },
            "closed": {
              "type": "boolean",
              "default": false,
              "description": "Set true only when historical or resolved markets are acceptable."
            },
            "category": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 10,
              "description": "Maximum normalized market rows to return."
            },
            "sort": {
              "type": "string",
              "enum": [
                "volume_desc",
                "liquidity_desc",
                "newest",
                "ending_soon"
              ],
              "default": "volume_desc",
              "description": "Sort order for returned markets."
            },
            "includeRules": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include capped market rule or description text."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "venue",
            "activeOnly",
            "closed",
            "category",
            "limit",
            "sort",
            "includeRules"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional text filter matched against market title, slug, description, outcomes, and category labels.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "venue",
              "type": "string",
              "required": false,
              "description": "Venue selector. Use managed for AgentBodega's normalized market feed.",
              "constraints": {
                "enum": [
                  "managed",
                  "polymarket"
                ],
                "default": "managed"
              }
            },
            {
              "name": "activeOnly",
              "type": "boolean",
              "required": false,
              "description": "When true, return currently active, unresolved markets only.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "closed",
              "type": "boolean",
              "required": false,
              "description": "Set true only when historical or resolved markets are acceptable.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "category",
              "type": "string",
              "required": false,
              "description": "Optional category, event, or tag filter when the caller wants a narrower market family.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum normalized market rows to return.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 25
              }
            },
            {
              "name": "sort",
              "type": "string",
              "required": false,
              "description": "Sort order for returned markets.",
              "constraints": {
                "enum": [
                  "volume_desc",
                  "liquidity_desc",
                  "newest",
                  "ending_soon"
                ],
                "default": "volume_desc"
              }
            },
            {
              "name": "includeRules",
              "type": "boolean",
              "required": false,
              "description": "Set true to include capped market rule or description text.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "activeOnly": true,
            "closed": false,
            "limit": 10,
            "sort": "volume_desc",
            "includeRules": false
          }
        },
        "exampleRequest": {
          "activeOnly": true,
          "closed": false,
          "limit": 10,
          "sort": "volume_desc",
          "includeRules": false
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "marketFeed",
            "count",
            "markets",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the market search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized filters and caps."
            },
            "marketFeed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Provider-neutral feed metadata and public-data boundary."
            },
            "count": {
              "type": "integer",
              "description": "Number of normalized market rows returned."
            },
            "markets": {
              "type": "array",
              "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable market id."
                  },
                  "slug": {
                    "type": "string",
                    "description": "Stable market slug when available."
                  },
                  "title": {
                    "type": "string",
                    "description": "Market question or title."
                  },
                  "url": {
                    "type": "string",
                    "description": "Public market URL when available."
                  },
                  "venue": {
                    "type": "string",
                    "description": "Normalized venue label."
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Whether the market is active."
                  },
                  "closed": {
                    "type": "boolean",
                    "description": "Whether the market is closed or resolved."
                  },
                  "endsAt": {
                    "type": "string",
                    "description": "Market end timestamp when available."
                  },
                  "volume": {
                    "type": "number",
                    "description": "Reported all-time volume when available."
                  },
                  "liquidity": {
                    "type": "number",
                    "description": "Reported liquidity when available."
                  },
                  "outcomes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Outcome labels and implied prices when available."
                  },
                  "categories": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Normalized category, event, or tag labels."
                  },
                  "rules": {
                    "type": "string",
                    "description": "Optional capped rules/description text when includeRules is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp."
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "marketFeed",
            "count",
            "markets",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the market search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized filters and caps."
            },
            "marketFeed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Provider-neutral feed metadata and public-data boundary."
            },
            "count": {
              "type": "integer",
              "description": "Number of normalized market rows returned."
            },
            "markets": {
              "type": "array",
              "description": "Normalized prediction-market rows. These are read-only market intelligence records, not trading instructions.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable market id."
                  },
                  "slug": {
                    "type": "string",
                    "description": "Stable market slug when available."
                  },
                  "title": {
                    "type": "string",
                    "description": "Market question or title."
                  },
                  "url": {
                    "type": "string",
                    "description": "Public market URL when available."
                  },
                  "venue": {
                    "type": "string",
                    "description": "Normalized venue label."
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Whether the market is active."
                  },
                  "closed": {
                    "type": "boolean",
                    "description": "Whether the market is closed or resolved."
                  },
                  "endsAt": {
                    "type": "string",
                    "description": "Market end timestamp when available."
                  },
                  "volume": {
                    "type": "number",
                    "description": "Reported all-time volume when available."
                  },
                  "liquidity": {
                    "type": "number",
                    "description": "Reported liquidity when available."
                  },
                  "outcomes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Outcome labels and implied prices when available."
                  },
                  "categories": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Normalized category, event, or tag labels."
                  },
                  "rules": {
                    "type": "string",
                    "description": "Optional capped rules/description text when includeRules is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp."
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "marketFeed": {
            "type": "managed-prediction-market-feed",
            "readOnly": true,
            "noTradeExecution": true
          },
          "count": 1,
          "markets": [
            {
              "title": "Top active example market",
              "outcomes": [
                {
                  "label": "Yes",
                  "price": 0.61
                },
                {
                  "label": "No",
                  "price": 0.39
                }
              ],
              "volume": 250000,
              "liquidity": 48000
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/social-media/x/user-profile",
      "type": "http",
      "x402Version": 2,
      "serviceName": "X User Profile Lookup",
      "description": "Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.",
      "longDescription": "Purpose: Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nBest use: Use this when an agent needs look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: none.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\"\n}\n```",
      "category": "social-media",
      "kind": "social-data-tool",
      "departmentId": "social-media",
      "department": "Social Media",
      "aisleId": "x-twitter",
      "aisle": "X/Twitter",
      "shelfId": "profiles",
      "shelf": "Profiles",
      "offeringId": "x-user-profile",
      "offering": "X User Profile Lookup",
      "pathIds": [
        "social-media",
        "x-twitter",
        "profiles",
        "x-user-profile"
      ],
      "pathLabels": [
        "Social Media",
        "X/Twitter",
        "Profiles",
        "X User Profile Lookup"
      ],
      "taxonomyPath": "social-media.x-twitter.profiles.x-user-profile",
      "layout": {
        "department": {
          "id": "social-media",
          "name": "Social Media"
        },
        "aisle": {
          "id": "x-twitter",
          "name": "X/Twitter"
        },
        "shelf": {
          "id": "profiles",
          "name": "Profiles"
        },
        "offering": {
          "id": "x-user-profile",
          "name": "X User Profile Lookup"
        },
        "pathIds": [
          "social-media",
          "x-twitter",
          "profiles",
          "x-user-profile"
        ],
        "pathLabels": [
          "Social Media",
          "X/Twitter",
          "Profiles",
          "X User Profile Lookup"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "social-media",
        "x",
        "twitter",
        "profile",
        "creator-research",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "30000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "30000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "username"
        ],
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Public username or profile URL. Leading @ is accepted and normalized."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "username"
        ],
        "optional": [],
        "fields": [
          {
            "name": "username",
            "type": "string",
            "required": true,
            "description": "Public username or profile URL. Leading @ is accepted and normalized.",
            "constraints": {
              "minLength": 1,
              "maxLength": 80
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "username": "OpenAI"
        }
      },
      "exampleRequest": {
        "username": "OpenAI"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "profile": {
            "type": "object",
            "additionalProperties": true
          },
          "tweet": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result_count": {
            "type": "integer"
          },
          "meta": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "x-user-profile",
          "name": "X User Profile Lookup",
          "department": "Social Media"
        },
        "requested": {
          "username": "OpenAI"
        },
        "profile": {
          "id": "44196397",
          "username": "OpenAI",
          "name": "OpenAI",
          "verified": true,
          "metrics": {
            "followers": 1000000,
            "following": 0,
            "posts": 1000
          }
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "username": "OpenAI"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "x-user-profile",
                  "name": "X User Profile Lookup",
                  "department": "Social Media"
                },
                "requested": {
                  "username": "OpenAI"
                },
                "profile": {
                  "id": "44196397",
                  "username": "OpenAI",
                  "name": "OpenAI",
                  "verified": true,
                  "metrics": {
                    "followers": 1000000,
                    "following": 0,
                    "posts": 1000
                  }
                }
              }
            }
          },
          "routeTemplate": "/api/social-media/x/user-profile",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "username"
                    ],
                    "properties": {
                      "username": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80,
                        "description": "Public username or profile URL. Leading @ is accepted and normalized."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "profile": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "tweet": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result_count": {
                        "type": "integer"
                      },
                      "meta": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x-user-profile",
            "url": "https://agentbodega.store/api/social-media/x/user-profile",
            "method": "POST",
            "description": "Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.",
            "longDescription": "Purpose: Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nBest use: Use this when an agent needs look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: none.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "X User Profile Lookup",
            "category": "social-media",
            "kind": "social-data-tool",
            "tags": [
              "social-media",
              "x",
              "twitter",
              "profile",
              "creator-research",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "username"
              ],
              "optional": [],
              "fields": [
                {
                  "name": "username",
                  "type": "string",
                  "required": true,
                  "description": "Public username or profile URL. Leading @ is accepted and normalized.",
                  "constraints": {
                    "minLength": 1,
                    "maxLength": 80
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "username": "OpenAI"
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "username"
              ],
              "properties": {
                "username": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 80,
                  "description": "Public username or profile URL. Leading @ is accepted and normalized."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "profile": {
                  "type": "object",
                  "additionalProperties": true
                },
                "tweet": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result_count": {
                  "type": "integer"
                },
                "meta": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.03"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.03",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/social-media/x/user-profile",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.03"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/social-media/x/user-profile",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "social-media",
        "kind": "social-data-tool",
        "taxonomy": {
          "departmentId": "social-media",
          "department": "Social Media",
          "aisleId": "x-twitter",
          "aisle": "X/Twitter",
          "shelfId": "profiles",
          "shelf": "Profiles",
          "offeringId": "x-user-profile",
          "offering": "X User Profile Lookup",
          "pathIds": [
            "social-media",
            "x-twitter",
            "profiles",
            "x-user-profile"
          ],
          "pathLabels": [
            "Social Media",
            "X/Twitter",
            "Profiles",
            "X User Profile Lookup"
          ],
          "taxonomyPath": "social-media.x-twitter.profiles.x-user-profile",
          "layout": {
            "department": {
              "id": "social-media",
              "name": "Social Media"
            },
            "aisle": {
              "id": "x-twitter",
              "name": "X/Twitter"
            },
            "shelf": {
              "id": "profiles",
              "name": "Profiles"
            },
            "offering": {
              "id": "x-user-profile",
              "name": "X User Profile Lookup"
            },
            "pathIds": [
              "social-media",
              "x-twitter",
              "profiles",
              "x-user-profile"
            ],
            "pathLabels": [
              "Social Media",
              "X/Twitter",
              "Profiles",
              "X User Profile Lookup"
            ]
          }
        },
        "description": {
          "short": "Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.",
          "full": "Purpose: Look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nBest use: Use this when an agent needs look up a public X/Twitter profile by username and return normalized account metadata, public metrics, verification state, bio, and profile image metadata.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: none.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "username"
          ],
          "properties": {
            "username": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Public username or profile URL. Leading @ is accepted and normalized."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "username"
          ],
          "properties": {
            "username": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Public username or profile URL. Leading @ is accepted and normalized."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "username"
          ],
          "optional": [],
          "fields": [
            {
              "name": "username",
              "type": "string",
              "required": true,
              "description": "Public username or profile URL. Leading @ is accepted and normalized.",
              "constraints": {
                "minLength": 1,
                "maxLength": 80
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "username": "OpenAI"
          }
        },
        "exampleRequest": {
          "username": "OpenAI"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "x-user-profile",
            "name": "X User Profile Lookup",
            "department": "Social Media"
          },
          "requested": {
            "username": "OpenAI"
          },
          "profile": {
            "id": "44196397",
            "username": "OpenAI",
            "name": "OpenAI",
            "verified": true,
            "metrics": {
              "followers": 1000000,
              "following": 0,
              "posts": 1000
            }
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/social-media/x/tweet",
      "type": "http",
      "x402Version": 2,
      "serviceName": "X Post Lookup",
      "description": "Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.",
      "longDescription": "Purpose: Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: tweetId, tweetUrl.\n\nAccepted fields:\n- tweetId (optional, string): Numeric public post id. Required unless tweetUrl is supplied.\n- tweetUrl (optional, string): Public post URL. Required unless tweetId is supplied. Constraints: format: uri; max length: 300.\n\nExample request body:\n```json\n{\n  \"tweetId\": \"20\"\n}\n```",
      "category": "social-media",
      "kind": "social-data-tool",
      "departmentId": "social-media",
      "department": "Social Media",
      "aisleId": "x-twitter",
      "aisle": "X/Twitter",
      "shelfId": "posts",
      "shelf": "Posts",
      "offeringId": "x-tweet",
      "offering": "X Post Lookup",
      "pathIds": [
        "social-media",
        "x-twitter",
        "posts",
        "x-tweet"
      ],
      "pathLabels": [
        "Social Media",
        "X/Twitter",
        "Posts",
        "X Post Lookup"
      ],
      "taxonomyPath": "social-media.x-twitter.posts.x-tweet",
      "layout": {
        "department": {
          "id": "social-media",
          "name": "Social Media"
        },
        "aisle": {
          "id": "x-twitter",
          "name": "X/Twitter"
        },
        "shelf": {
          "id": "posts",
          "name": "Posts"
        },
        "offering": {
          "id": "x-tweet",
          "name": "X Post Lookup"
        },
        "pathIds": [
          "social-media",
          "x-twitter",
          "posts",
          "x-tweet"
        ],
        "pathLabels": [
          "Social Media",
          "X/Twitter",
          "Posts",
          "X Post Lookup"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "social-media",
        "x",
        "twitter",
        "tweet",
        "post",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "20000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "20000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "anyOf": [
          {
            "required": [
              "tweetId"
            ]
          },
          {
            "required": [
              "tweetUrl"
            ]
          }
        ],
        "properties": {
          "tweetId": {
            "type": "string",
            "pattern": "^[0-9]{1,30}$",
            "description": "Numeric public post id. Required unless tweetUrl is supplied."
          },
          "tweetUrl": {
            "type": "string",
            "format": "uri",
            "maxLength": 300,
            "description": "Public post URL. Required unless tweetId is supplied."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "tweetId",
          "tweetUrl"
        ],
        "fields": [
          {
            "name": "tweetId",
            "type": "string",
            "required": false,
            "description": "Numeric public post id. Required unless tweetUrl is supplied."
          },
          {
            "name": "tweetUrl",
            "type": "string",
            "required": false,
            "description": "Public post URL. Required unless tweetId is supplied.",
            "constraints": {
              "format": "uri",
              "maxLength": 300
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "tweetId": "20"
        }
      },
      "exampleRequest": {
        "tweetId": "20"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "profile": {
            "type": "object",
            "additionalProperties": true
          },
          "tweet": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result_count": {
            "type": "integer"
          },
          "meta": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "x-tweet",
          "name": "X Post Lookup",
          "department": "Social Media"
        },
        "requested": {
          "tweetId": "20"
        },
        "tweet": {
          "id": "20",
          "text": "Normalized public post text",
          "author": {
            "username": "jack"
          },
          "metrics": {
            "likes": 0,
            "reposts": 0,
            "replies": 0
          }
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "tweetId": "20"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "x-tweet",
                  "name": "X Post Lookup",
                  "department": "Social Media"
                },
                "requested": {
                  "tweetId": "20"
                },
                "tweet": {
                  "id": "20",
                  "text": "Normalized public post text",
                  "author": {
                    "username": "jack"
                  },
                  "metrics": {
                    "likes": 0,
                    "reposts": 0,
                    "replies": 0
                  }
                }
              }
            }
          },
          "routeTemplate": "/api/social-media/x/tweet",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "anyOf": [
                      {
                        "required": [
                          "tweetId"
                        ]
                      },
                      {
                        "required": [
                          "tweetUrl"
                        ]
                      }
                    ],
                    "properties": {
                      "tweetId": {
                        "type": "string",
                        "pattern": "^[0-9]{1,30}$",
                        "description": "Numeric public post id. Required unless tweetUrl is supplied."
                      },
                      "tweetUrl": {
                        "type": "string",
                        "format": "uri",
                        "maxLength": 300,
                        "description": "Public post URL. Required unless tweetId is supplied."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "profile": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "tweet": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result_count": {
                        "type": "integer"
                      },
                      "meta": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x-tweet",
            "url": "https://agentbodega.store/api/social-media/x/tweet",
            "method": "POST",
            "description": "Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.",
            "longDescription": "Purpose: Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: tweetId, tweetUrl.\n\nAccepted fields:\n- tweetId (optional, string): Numeric public post id. Required unless tweetUrl is supplied.\n- tweetUrl (optional, string): Public post URL. Required unless tweetId is supplied. Constraints: format: uri; max length: 300.\n\nExample request body:\n```json\n{\n  \"tweetId\": \"20\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "X Post Lookup",
            "category": "social-media",
            "kind": "social-data-tool",
            "tags": [
              "social-media",
              "x",
              "twitter",
              "tweet",
              "post",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "tweetId",
                "tweetUrl"
              ],
              "fields": [
                {
                  "name": "tweetId",
                  "type": "string",
                  "required": false,
                  "description": "Numeric public post id. Required unless tweetUrl is supplied."
                },
                {
                  "name": "tweetUrl",
                  "type": "string",
                  "required": false,
                  "description": "Public post URL. Required unless tweetId is supplied.",
                  "constraints": {
                    "format": "uri",
                    "maxLength": 300
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "tweetId": "20"
              }
            },
            "inputSchema": {
              "type": "object",
              "anyOf": [
                {
                  "required": [
                    "tweetId"
                  ]
                },
                {
                  "required": [
                    "tweetUrl"
                  ]
                }
              ],
              "properties": {
                "tweetId": {
                  "type": "string",
                  "pattern": "^[0-9]{1,30}$",
                  "description": "Numeric public post id. Required unless tweetUrl is supplied."
                },
                "tweetUrl": {
                  "type": "string",
                  "format": "uri",
                  "maxLength": 300,
                  "description": "Public post URL. Required unless tweetId is supplied."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "profile": {
                  "type": "object",
                  "additionalProperties": true
                },
                "tweet": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result_count": {
                  "type": "integer"
                },
                "meta": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.02"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.02",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/social-media/x/tweet",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.02"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/social-media/x/tweet",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "social-media",
        "kind": "social-data-tool",
        "taxonomy": {
          "departmentId": "social-media",
          "department": "Social Media",
          "aisleId": "x-twitter",
          "aisle": "X/Twitter",
          "shelfId": "posts",
          "shelf": "Posts",
          "offeringId": "x-tweet",
          "offering": "X Post Lookup",
          "pathIds": [
            "social-media",
            "x-twitter",
            "posts",
            "x-tweet"
          ],
          "pathLabels": [
            "Social Media",
            "X/Twitter",
            "Posts",
            "X Post Lookup"
          ],
          "taxonomyPath": "social-media.x-twitter.posts.x-tweet",
          "layout": {
            "department": {
              "id": "social-media",
              "name": "Social Media"
            },
            "aisle": {
              "id": "x-twitter",
              "name": "X/Twitter"
            },
            "shelf": {
              "id": "posts",
              "name": "Posts"
            },
            "offering": {
              "id": "x-tweet",
              "name": "X Post Lookup"
            },
            "pathIds": [
              "social-media",
              "x-twitter",
              "posts",
              "x-tweet"
            ],
            "pathLabels": [
              "Social Media",
              "X/Twitter",
              "Posts",
              "X Post Lookup"
            ]
          }
        },
        "description": {
          "short": "Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.",
          "full": "Purpose: Look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs look up one public X/Twitter post by numeric id or post URL and return normalized text, author, created time, language, and public engagement metrics.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: tweetId, tweetUrl.\n\nAccepted fields:\n- tweetId (optional, string): Numeric public post id. Required unless tweetUrl is supplied.\n- tweetUrl (optional, string): Public post URL. Required unless tweetId is supplied. Constraints: format: uri; max length: 300.\n\nExample request body:\n```json\n{\n  \"tweetId\": \"20\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "tweetId"
              ]
            },
            {
              "required": [
                "tweetUrl"
              ]
            }
          ],
          "properties": {
            "tweetId": {
              "type": "string",
              "pattern": "^[0-9]{1,30}$",
              "description": "Numeric public post id. Required unless tweetUrl is supplied."
            },
            "tweetUrl": {
              "type": "string",
              "format": "uri",
              "maxLength": 300,
              "description": "Public post URL. Required unless tweetId is supplied."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "tweetId"
              ]
            },
            {
              "required": [
                "tweetUrl"
              ]
            }
          ],
          "properties": {
            "tweetId": {
              "type": "string",
              "pattern": "^[0-9]{1,30}$",
              "description": "Numeric public post id. Required unless tweetUrl is supplied."
            },
            "tweetUrl": {
              "type": "string",
              "format": "uri",
              "maxLength": 300,
              "description": "Public post URL. Required unless tweetId is supplied."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "tweetId",
            "tweetUrl"
          ],
          "fields": [
            {
              "name": "tweetId",
              "type": "string",
              "required": false,
              "description": "Numeric public post id. Required unless tweetUrl is supplied."
            },
            {
              "name": "tweetUrl",
              "type": "string",
              "required": false,
              "description": "Public post URL. Required unless tweetId is supplied.",
              "constraints": {
                "format": "uri",
                "maxLength": 300
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "tweetId": "20"
          }
        },
        "exampleRequest": {
          "tweetId": "20"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "x-tweet",
            "name": "X Post Lookup",
            "department": "Social Media"
          },
          "requested": {
            "tweetId": "20"
          },
          "tweet": {
            "id": "20",
            "text": "Normalized public post text",
            "author": {
              "username": "jack"
            },
            "metrics": {
              "likes": 0,
              "reposts": 0,
              "replies": 0
            }
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/social-media/x/user-timeline",
      "type": "http",
      "x402Version": 2,
      "serviceName": "X User Timeline",
      "description": "Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.",
      "longDescription": "Purpose: Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: maxResults.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n- maxResults (optional, integer): Maximum recent posts to return. Constraints: default: 20; min: 1; max: 100.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\",\n  \"maxResults\": 5\n}\n```",
      "category": "social-media",
      "kind": "social-data-tool",
      "departmentId": "social-media",
      "department": "Social Media",
      "aisleId": "x-twitter",
      "aisle": "X/Twitter",
      "shelfId": "timelines",
      "shelf": "Timelines",
      "offeringId": "x-user-timeline",
      "offering": "X User Timeline",
      "pathIds": [
        "social-media",
        "x-twitter",
        "timelines",
        "x-user-timeline"
      ],
      "pathLabels": [
        "Social Media",
        "X/Twitter",
        "Timelines",
        "X User Timeline"
      ],
      "taxonomyPath": "social-media.x-twitter.timelines.x-user-timeline",
      "layout": {
        "department": {
          "id": "social-media",
          "name": "Social Media"
        },
        "aisle": {
          "id": "x-twitter",
          "name": "X/Twitter"
        },
        "shelf": {
          "id": "timelines",
          "name": "Timelines"
        },
        "offering": {
          "id": "x-user-timeline",
          "name": "X User Timeline"
        },
        "pathIds": [
          "social-media",
          "x-twitter",
          "timelines",
          "x-user-timeline"
        ],
        "pathLabels": [
          "Social Media",
          "X/Twitter",
          "Timelines",
          "X User Timeline"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "social-media",
        "x",
        "twitter",
        "timeline",
        "creator-research",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "50000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "50000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "username"
        ],
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Public username or profile URL. Leading @ is accepted and normalized."
          },
          "maxResults": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Maximum recent posts to return."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "username"
        ],
        "optional": [
          "maxResults"
        ],
        "fields": [
          {
            "name": "username",
            "type": "string",
            "required": true,
            "description": "Public username or profile URL. Leading @ is accepted and normalized.",
            "constraints": {
              "minLength": 1,
              "maxLength": 80
            }
          },
          {
            "name": "maxResults",
            "type": "integer",
            "required": false,
            "description": "Maximum recent posts to return.",
            "constraints": {
              "default": 20,
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "username": "OpenAI",
          "maxResults": 5
        }
      },
      "exampleRequest": {
        "username": "OpenAI",
        "maxResults": 5
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "profile": {
            "type": "object",
            "additionalProperties": true
          },
          "tweet": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result_count": {
            "type": "integer"
          },
          "meta": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "x-user-timeline",
          "name": "X User Timeline",
          "department": "Social Media"
        },
        "requested": {
          "username": "OpenAI",
          "maxResults": 5
        },
        "result_count": 5,
        "results": [
          {
            "id": "1110302988",
            "text": "Normalized public post text",
            "author": {
              "username": "OpenAI"
            },
            "metrics": {
              "likes": 10,
              "reposts": 2,
              "replies": 1
            }
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "username": "OpenAI",
                "maxResults": 5
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "x-user-timeline",
                  "name": "X User Timeline",
                  "department": "Social Media"
                },
                "requested": {
                  "username": "OpenAI",
                  "maxResults": 5
                },
                "result_count": 5,
                "results": [
                  {
                    "id": "1110302988",
                    "text": "Normalized public post text",
                    "author": {
                      "username": "OpenAI"
                    },
                    "metrics": {
                      "likes": 10,
                      "reposts": 2,
                      "replies": 1
                    }
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/social-media/x/user-timeline",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "username"
                    ],
                    "properties": {
                      "username": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80,
                        "description": "Public username or profile URL. Leading @ is accepted and normalized."
                      },
                      "maxResults": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100,
                        "default": 20,
                        "description": "Maximum recent posts to return."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "profile": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "tweet": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result_count": {
                        "type": "integer"
                      },
                      "meta": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x-user-timeline",
            "url": "https://agentbodega.store/api/social-media/x/user-timeline",
            "method": "POST",
            "description": "Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.",
            "longDescription": "Purpose: Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: maxResults.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n- maxResults (optional, integer): Maximum recent posts to return. Constraints: default: 20; min: 1; max: 100.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\",\n  \"maxResults\": 5\n}\n```",
            "mimeType": "application/json",
            "serviceName": "X User Timeline",
            "category": "social-media",
            "kind": "social-data-tool",
            "tags": [
              "social-media",
              "x",
              "twitter",
              "timeline",
              "creator-research",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "username"
              ],
              "optional": [
                "maxResults"
              ],
              "fields": [
                {
                  "name": "username",
                  "type": "string",
                  "required": true,
                  "description": "Public username or profile URL. Leading @ is accepted and normalized.",
                  "constraints": {
                    "minLength": 1,
                    "maxLength": 80
                  }
                },
                {
                  "name": "maxResults",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent posts to return.",
                  "constraints": {
                    "default": 20,
                    "minimum": 1,
                    "maximum": 100
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "username": "OpenAI",
                "maxResults": 5
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "username"
              ],
              "properties": {
                "username": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 80,
                  "description": "Public username or profile URL. Leading @ is accepted and normalized."
                },
                "maxResults": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100,
                  "default": 20,
                  "description": "Maximum recent posts to return."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "profile": {
                  "type": "object",
                  "additionalProperties": true
                },
                "tweet": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result_count": {
                  "type": "integer"
                },
                "meta": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.05"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.05",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/social-media/x/user-timeline",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.05"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/social-media/x/user-timeline",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "social-media",
        "kind": "social-data-tool",
        "taxonomy": {
          "departmentId": "social-media",
          "department": "Social Media",
          "aisleId": "x-twitter",
          "aisle": "X/Twitter",
          "shelfId": "timelines",
          "shelf": "Timelines",
          "offeringId": "x-user-timeline",
          "offering": "X User Timeline",
          "pathIds": [
            "social-media",
            "x-twitter",
            "timelines",
            "x-user-timeline"
          ],
          "pathLabels": [
            "Social Media",
            "X/Twitter",
            "Timelines",
            "X User Timeline"
          ],
          "taxonomyPath": "social-media.x-twitter.timelines.x-user-timeline",
          "layout": {
            "department": {
              "id": "social-media",
              "name": "Social Media"
            },
            "aisle": {
              "id": "x-twitter",
              "name": "X/Twitter"
            },
            "shelf": {
              "id": "timelines",
              "name": "Timelines"
            },
            "offering": {
              "id": "x-user-timeline",
              "name": "X User Timeline"
            },
            "pathIds": [
              "social-media",
              "x-twitter",
              "timelines",
              "x-user-timeline"
            ],
            "pathLabels": [
              "Social Media",
              "X/Twitter",
              "Timelines",
              "X User Timeline"
            ]
          }
        },
        "description": {
          "short": "Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.",
          "full": "Purpose: Return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nBest use: Use this when an agent needs return recent public posts for a username with normalized post ids, text, author metadata, created time, language, and public engagement metrics.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: username.\nOptional fields: maxResults.\n\nAccepted fields:\n- username (required, string): Public username or profile URL. Leading @ is accepted and normalized. Constraints: min length: 1; max length: 80.\n- maxResults (optional, integer): Maximum recent posts to return. Constraints: default: 20; min: 1; max: 100.\n\nExample request body:\n```json\n{\n  \"username\": \"OpenAI\",\n  \"maxResults\": 5\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "username"
          ],
          "properties": {
            "username": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Public username or profile URL. Leading @ is accepted and normalized."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "description": "Maximum recent posts to return."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "username"
          ],
          "properties": {
            "username": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Public username or profile URL. Leading @ is accepted and normalized."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "description": "Maximum recent posts to return."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "username"
          ],
          "optional": [
            "maxResults"
          ],
          "fields": [
            {
              "name": "username",
              "type": "string",
              "required": true,
              "description": "Public username or profile URL. Leading @ is accepted and normalized.",
              "constraints": {
                "minLength": 1,
                "maxLength": 80
              }
            },
            {
              "name": "maxResults",
              "type": "integer",
              "required": false,
              "description": "Maximum recent posts to return.",
              "constraints": {
                "default": 20,
                "minimum": 1,
                "maximum": 100
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "username": "OpenAI",
            "maxResults": 5
          }
        },
        "exampleRequest": {
          "username": "OpenAI",
          "maxResults": 5
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "x-user-timeline",
            "name": "X User Timeline",
            "department": "Social Media"
          },
          "requested": {
            "username": "OpenAI",
            "maxResults": 5
          },
          "result_count": 5,
          "results": [
            {
              "id": "1110302988",
              "text": "Normalized public post text",
              "author": {
                "username": "OpenAI"
              },
              "metrics": {
                "likes": 10,
                "reposts": 2,
                "replies": 1
              }
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/social-media/x/tweet-search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "X Post Search",
      "description": "Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.",
      "longDescription": "Purpose: Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nBest use: Use this when an agent needs search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nPrice: $0.06 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, words, phrase, anyWords, noneWords, hashtags, from, to, mentioning, minReplies, minLikes, minReposts, since, until, maxResults.\n\nAccepted fields:\n- query (optional, string): Raw X/Twitter search query. If supplied, structured filter fields are ignored. Constraints: max length: 500.\n- words (optional, string): All words to include. Constraints: max length: 160.\n- phrase (optional, string): Exact phrase to include. Constraints: max length: 160.\n- anyWords (optional, array): Any of these words may match. Constraints: max items: 12.\n- noneWords (optional, array): Words to exclude. Constraints: max items: 12.\n- hashtags (optional, array): Hashtags to include, with or without #. Constraints: max items: 12.\n- from (optional, string): Only posts from this username. Constraints: max length: 80.\n- to (optional, string): Only replies to this username. Constraints: max length: 80.\n- mentioning (optional, string): Only posts mentioning this username. Constraints: max length: 80.\n- minReplies (optional, integer): Minimum reply count. Constraints: min: 0.\n- minLikes (optional, integer): Minimum like count. Constraints: min: 0.\n- minReposts (optional, integer): Minimum repost count. Constraints: min: 0.\n- since (optional, string): Start date in YYYY-MM-DD.\n- until (optional, string): End date in YYYY-MM-DD.\n- maxResults (optional, integer): Maximum posts to return. Search is capped at 20 per call. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"from\": \"OpenAI\",\n  \"words\": \"agent\",\n  \"minLikes\": 10,\n  \"maxResults\": 5\n}\n```",
      "category": "social-media",
      "kind": "social-data-tool",
      "departmentId": "social-media",
      "department": "Social Media",
      "aisleId": "x-twitter",
      "aisle": "X/Twitter",
      "shelfId": "search",
      "shelf": "Search",
      "offeringId": "x-tweet-search",
      "offering": "X Post Search",
      "pathIds": [
        "social-media",
        "x-twitter",
        "search",
        "x-tweet-search"
      ],
      "pathLabels": [
        "Social Media",
        "X/Twitter",
        "Search",
        "X Post Search"
      ],
      "taxonomyPath": "social-media.x-twitter.search.x-tweet-search",
      "layout": {
        "department": {
          "id": "social-media",
          "name": "Social Media"
        },
        "aisle": {
          "id": "x-twitter",
          "name": "X/Twitter"
        },
        "shelf": {
          "id": "search",
          "name": "Search"
        },
        "offering": {
          "id": "x-tweet-search",
          "name": "X Post Search"
        },
        "pathIds": [
          "social-media",
          "x-twitter",
          "search",
          "x-tweet-search"
        ],
        "pathLabels": [
          "Social Media",
          "X/Twitter",
          "Search",
          "X Post Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "social-media",
        "x",
        "twitter",
        "search",
        "social-listening",
        "creator-research",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "60000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "60000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "anyOf": [
          {
            "required": [
              "query"
            ]
          },
          {
            "required": [
              "words"
            ]
          },
          {
            "required": [
              "phrase"
            ]
          },
          {
            "required": [
              "hashtags"
            ]
          },
          {
            "required": [
              "from"
            ]
          }
        ],
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 500,
            "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored."
          },
          "words": {
            "type": "string",
            "maxLength": 160,
            "description": "All words to include."
          },
          "phrase": {
            "type": "string",
            "maxLength": 160,
            "description": "Exact phrase to include."
          },
          "anyWords": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 80,
              "description": "Any Words item value for X Post Search. Constraints: max length: 80."
            },
            "maxItems": 12,
            "description": "Any of these words may match."
          },
          "noneWords": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 80,
              "description": "None Words item value for X Post Search. Constraints: max length: 80."
            },
            "maxItems": 12,
            "description": "Words to exclude."
          },
          "hashtags": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 80,
              "description": "Hashtags item value for X Post Search. Constraints: max length: 80."
            },
            "maxItems": 12,
            "description": "Hashtags to include, with or without #."
          },
          "from": {
            "type": "string",
            "maxLength": 80,
            "description": "Only posts from this username."
          },
          "to": {
            "type": "string",
            "maxLength": 80,
            "description": "Only replies to this username."
          },
          "mentioning": {
            "type": "string",
            "maxLength": 80,
            "description": "Only posts mentioning this username."
          },
          "minReplies": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum reply count."
          },
          "minLikes": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum like count."
          },
          "minReposts": {
            "type": "integer",
            "minimum": 0,
            "description": "Minimum repost count."
          },
          "since": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Start date in YYYY-MM-DD."
          },
          "until": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "End date in YYYY-MM-DD."
          },
          "maxResults": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 10,
            "description": "Maximum posts to return. Search is capped at 20 per call."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "words",
          "phrase",
          "anyWords",
          "noneWords",
          "hashtags",
          "from",
          "to",
          "mentioning",
          "minReplies",
          "minLikes",
          "minReposts",
          "since",
          "until",
          "maxResults"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored.",
            "constraints": {
              "maxLength": 500
            }
          },
          {
            "name": "words",
            "type": "string",
            "required": false,
            "description": "All words to include.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "phrase",
            "type": "string",
            "required": false,
            "description": "Exact phrase to include.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "anyWords",
            "type": "array",
            "required": false,
            "description": "Any of these words may match.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "noneWords",
            "type": "array",
            "required": false,
            "description": "Words to exclude.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "hashtags",
            "type": "array",
            "required": false,
            "description": "Hashtags to include, with or without #.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "type": "string",
            "required": false,
            "description": "Only posts from this username.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "to",
            "type": "string",
            "required": false,
            "description": "Only replies to this username.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "mentioning",
            "type": "string",
            "required": false,
            "description": "Only posts mentioning this username.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "minReplies",
            "type": "integer",
            "required": false,
            "description": "Minimum reply count.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "minLikes",
            "type": "integer",
            "required": false,
            "description": "Minimum like count.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "minReposts",
            "type": "integer",
            "required": false,
            "description": "Minimum repost count.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "since",
            "type": "string",
            "required": false,
            "description": "Start date in YYYY-MM-DD."
          },
          {
            "name": "until",
            "type": "string",
            "required": false,
            "description": "End date in YYYY-MM-DD."
          },
          {
            "name": "maxResults",
            "type": "integer",
            "required": false,
            "description": "Maximum posts to return. Search is capped at 20 per call.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 20
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "from": "OpenAI",
          "words": "agent",
          "minLikes": 10,
          "maxResults": 5
        }
      },
      "exampleRequest": {
        "from": "OpenAI",
        "words": "agent",
        "minLikes": 10,
        "maxResults": 5
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "profile": {
            "type": "object",
            "additionalProperties": true
          },
          "tweet": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result_count": {
            "type": "integer"
          },
          "meta": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "x-tweet-search",
          "name": "X Post Search",
          "department": "Social Media"
        },
        "requested": {
          "query": "agent from:OpenAI min_faves:10",
          "maxResults": 5
        },
        "result_count": 5,
        "results": [
          {
            "id": "1110302988",
            "text": "Normalized public post text",
            "author": {
              "username": "OpenAI"
            },
            "metrics": {
              "likes": 10,
              "reposts": 2,
              "replies": 1
            }
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "from": "OpenAI",
                "words": "agent",
                "minLikes": 10,
                "maxResults": 5
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "x-tweet-search",
                  "name": "X Post Search",
                  "department": "Social Media"
                },
                "requested": {
                  "query": "agent from:OpenAI min_faves:10",
                  "maxResults": 5
                },
                "result_count": 5,
                "results": [
                  {
                    "id": "1110302988",
                    "text": "Normalized public post text",
                    "author": {
                      "username": "OpenAI"
                    },
                    "metrics": {
                      "likes": 10,
                      "reposts": 2,
                      "replies": 1
                    }
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/social-media/x/tweet-search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "anyOf": [
                      {
                        "required": [
                          "query"
                        ]
                      },
                      {
                        "required": [
                          "words"
                        ]
                      },
                      {
                        "required": [
                          "phrase"
                        ]
                      },
                      {
                        "required": [
                          "hashtags"
                        ]
                      },
                      {
                        "required": [
                          "from"
                        ]
                      }
                    ],
                    "properties": {
                      "query": {
                        "type": "string",
                        "maxLength": 500,
                        "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored."
                      },
                      "words": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "All words to include."
                      },
                      "phrase": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Exact phrase to include."
                      },
                      "anyWords": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "maxLength": 80,
                          "description": "Any Words item value for X Post Search. Constraints: max length: 80."
                        },
                        "maxItems": 12,
                        "description": "Any of these words may match."
                      },
                      "noneWords": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "maxLength": 80,
                          "description": "None Words item value for X Post Search. Constraints: max length: 80."
                        },
                        "maxItems": 12,
                        "description": "Words to exclude."
                      },
                      "hashtags": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "maxLength": 80,
                          "description": "Hashtags item value for X Post Search. Constraints: max length: 80."
                        },
                        "maxItems": 12,
                        "description": "Hashtags to include, with or without #."
                      },
                      "from": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Only posts from this username."
                      },
                      "to": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Only replies to this username."
                      },
                      "mentioning": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Only posts mentioning this username."
                      },
                      "minReplies": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum reply count."
                      },
                      "minLikes": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum like count."
                      },
                      "minReposts": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Minimum repost count."
                      },
                      "since": {
                        "type": "string",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "description": "Start date in YYYY-MM-DD."
                      },
                      "until": {
                        "type": "string",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "description": "End date in YYYY-MM-DD."
                      },
                      "maxResults": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 10,
                        "description": "Maximum posts to return. Search is capped at 20 per call."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "profile": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "tweet": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result_count": {
                        "type": "integer"
                      },
                      "meta": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x-tweet-search",
            "url": "https://agentbodega.store/api/social-media/x/tweet-search",
            "method": "POST",
            "description": "Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.",
            "longDescription": "Purpose: Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nBest use: Use this when an agent needs search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nPrice: $0.06 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, words, phrase, anyWords, noneWords, hashtags, from, to, mentioning, minReplies, minLikes, minReposts, since, until, maxResults.\n\nAccepted fields:\n- query (optional, string): Raw X/Twitter search query. If supplied, structured filter fields are ignored. Constraints: max length: 500.\n- words (optional, string): All words to include. Constraints: max length: 160.\n- phrase (optional, string): Exact phrase to include. Constraints: max length: 160.\n- anyWords (optional, array): Any of these words may match. Constraints: max items: 12.\n- noneWords (optional, array): Words to exclude. Constraints: max items: 12.\n- hashtags (optional, array): Hashtags to include, with or without #. Constraints: max items: 12.\n- from (optional, string): Only posts from this username. Constraints: max length: 80.\n- to (optional, string): Only replies to this username. Constraints: max length: 80.\n- mentioning (optional, string): Only posts mentioning this username. Constraints: max length: 80.\n- minReplies (optional, integer): Minimum reply count. Constraints: min: 0.\n- minLikes (optional, integer): Minimum like count. Constraints: min: 0.\n- minReposts (optional, integer): Minimum repost count. Constraints: min: 0.\n- since (optional, string): Start date in YYYY-MM-DD.\n- until (optional, string): End date in YYYY-MM-DD.\n- maxResults (optional, integer): Maximum posts to return. Search is capped at 20 per call. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"from\": \"OpenAI\",\n  \"words\": \"agent\",\n  \"minLikes\": 10,\n  \"maxResults\": 5\n}\n```",
            "mimeType": "application/json",
            "serviceName": "X Post Search",
            "category": "social-media",
            "kind": "social-data-tool",
            "tags": [
              "social-media",
              "x",
              "twitter",
              "search",
              "social-listening",
              "creator-research",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "words",
                "phrase",
                "anyWords",
                "noneWords",
                "hashtags",
                "from",
                "to",
                "mentioning",
                "minReplies",
                "minLikes",
                "minReposts",
                "since",
                "until",
                "maxResults"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored.",
                  "constraints": {
                    "maxLength": 500
                  }
                },
                {
                  "name": "words",
                  "type": "string",
                  "required": false,
                  "description": "All words to include.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "phrase",
                  "type": "string",
                  "required": false,
                  "description": "Exact phrase to include.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "anyWords",
                  "type": "array",
                  "required": false,
                  "description": "Any of these words may match.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "noneWords",
                  "type": "array",
                  "required": false,
                  "description": "Words to exclude.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "hashtags",
                  "type": "array",
                  "required": false,
                  "description": "Hashtags to include, with or without #.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "from",
                  "type": "string",
                  "required": false,
                  "description": "Only posts from this username.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "to",
                  "type": "string",
                  "required": false,
                  "description": "Only replies to this username.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "mentioning",
                  "type": "string",
                  "required": false,
                  "description": "Only posts mentioning this username.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "minReplies",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum reply count.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "minLikes",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum like count.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "minReposts",
                  "type": "integer",
                  "required": false,
                  "description": "Minimum repost count.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "since",
                  "type": "string",
                  "required": false,
                  "description": "Start date in YYYY-MM-DD."
                },
                {
                  "name": "until",
                  "type": "string",
                  "required": false,
                  "description": "End date in YYYY-MM-DD."
                },
                {
                  "name": "maxResults",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum posts to return. Search is capped at 20 per call.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 20
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "from": "OpenAI",
                "words": "agent",
                "minLikes": 10,
                "maxResults": 5
              }
            },
            "inputSchema": {
              "type": "object",
              "anyOf": [
                {
                  "required": [
                    "query"
                  ]
                },
                {
                  "required": [
                    "words"
                  ]
                },
                {
                  "required": [
                    "phrase"
                  ]
                },
                {
                  "required": [
                    "hashtags"
                  ]
                },
                {
                  "required": [
                    "from"
                  ]
                }
              ],
              "properties": {
                "query": {
                  "type": "string",
                  "maxLength": 500,
                  "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored."
                },
                "words": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "All words to include."
                },
                "phrase": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Exact phrase to include."
                },
                "anyWords": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 80,
                    "description": "Any Words item value for X Post Search. Constraints: max length: 80."
                  },
                  "maxItems": 12,
                  "description": "Any of these words may match."
                },
                "noneWords": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 80,
                    "description": "None Words item value for X Post Search. Constraints: max length: 80."
                  },
                  "maxItems": 12,
                  "description": "Words to exclude."
                },
                "hashtags": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 80,
                    "description": "Hashtags item value for X Post Search. Constraints: max length: 80."
                  },
                  "maxItems": 12,
                  "description": "Hashtags to include, with or without #."
                },
                "from": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Only posts from this username."
                },
                "to": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Only replies to this username."
                },
                "mentioning": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Only posts mentioning this username."
                },
                "minReplies": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum reply count."
                },
                "minLikes": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum like count."
                },
                "minReposts": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Minimum repost count."
                },
                "since": {
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                  "description": "Start date in YYYY-MM-DD."
                },
                "until": {
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                  "description": "End date in YYYY-MM-DD."
                },
                "maxResults": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 10,
                  "description": "Maximum posts to return. Search is capped at 20 per call."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "profile": {
                  "type": "object",
                  "additionalProperties": true
                },
                "tweet": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result_count": {
                  "type": "integer"
                },
                "meta": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.06"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.06",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/social-media/x/tweet-search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.06"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/social-media/x/tweet-search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "social-media",
        "kind": "social-data-tool",
        "taxonomy": {
          "departmentId": "social-media",
          "department": "Social Media",
          "aisleId": "x-twitter",
          "aisle": "X/Twitter",
          "shelfId": "search",
          "shelf": "Search",
          "offeringId": "x-tweet-search",
          "offering": "X Post Search",
          "pathIds": [
            "social-media",
            "x-twitter",
            "search",
            "x-tweet-search"
          ],
          "pathLabels": [
            "Social Media",
            "X/Twitter",
            "Search",
            "X Post Search"
          ],
          "taxonomyPath": "social-media.x-twitter.search.x-tweet-search",
          "layout": {
            "department": {
              "id": "social-media",
              "name": "Social Media"
            },
            "aisle": {
              "id": "x-twitter",
              "name": "X/Twitter"
            },
            "shelf": {
              "id": "search",
              "name": "Search"
            },
            "offering": {
              "id": "x-tweet-search",
              "name": "X Post Search"
            },
            "pathIds": [
              "social-media",
              "x-twitter",
              "search",
              "x-tweet-search"
            ],
            "pathLabels": [
              "Social Media",
              "X/Twitter",
              "Search",
              "X Post Search"
            ]
          }
        },
        "description": {
          "short": "Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.",
          "full": "Purpose: Search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nBest use: Use this when an agent needs search public X/Twitter posts with a raw query or bounded structured filters such as words, exact phrase, hashtags, author, mention target, engagement thresholds, and date range.\nPrice: $0.06 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, words, phrase, anyWords, noneWords, hashtags, from, to, mentioning, minReplies, minLikes, minReposts, since, until, maxResults.\n\nAccepted fields:\n- query (optional, string): Raw X/Twitter search query. If supplied, structured filter fields are ignored. Constraints: max length: 500.\n- words (optional, string): All words to include. Constraints: max length: 160.\n- phrase (optional, string): Exact phrase to include. Constraints: max length: 160.\n- anyWords (optional, array): Any of these words may match. Constraints: max items: 12.\n- noneWords (optional, array): Words to exclude. Constraints: max items: 12.\n- hashtags (optional, array): Hashtags to include, with or without #. Constraints: max items: 12.\n- from (optional, string): Only posts from this username. Constraints: max length: 80.\n- to (optional, string): Only replies to this username. Constraints: max length: 80.\n- mentioning (optional, string): Only posts mentioning this username. Constraints: max length: 80.\n- minReplies (optional, integer): Minimum reply count. Constraints: min: 0.\n- minLikes (optional, integer): Minimum like count. Constraints: min: 0.\n- minReposts (optional, integer): Minimum repost count. Constraints: min: 0.\n- since (optional, string): Start date in YYYY-MM-DD.\n- until (optional, string): End date in YYYY-MM-DD.\n- maxResults (optional, integer): Maximum posts to return. Search is capped at 20 per call. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"from\": \"OpenAI\",\n  \"words\": \"agent\",\n  \"minLikes\": 10,\n  \"maxResults\": 5\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "query"
              ]
            },
            {
              "required": [
                "words"
              ]
            },
            {
              "required": [
                "phrase"
              ]
            },
            {
              "required": [
                "hashtags"
              ]
            },
            {
              "required": [
                "from"
              ]
            }
          ],
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 500,
              "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored."
            },
            "words": {
              "type": "string",
              "maxLength": 160,
              "description": "All words to include."
            },
            "phrase": {
              "type": "string",
              "maxLength": 160,
              "description": "Exact phrase to include."
            },
            "anyWords": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Any Words item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Any of these words may match."
            },
            "noneWords": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "None Words item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Words to exclude."
            },
            "hashtags": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Hashtags item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Hashtags to include, with or without #."
            },
            "from": {
              "type": "string",
              "maxLength": 80,
              "description": "Only posts from this username."
            },
            "to": {
              "type": "string",
              "maxLength": 80,
              "description": "Only replies to this username."
            },
            "mentioning": {
              "type": "string",
              "maxLength": 80,
              "description": "Only posts mentioning this username."
            },
            "minReplies": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum reply count."
            },
            "minLikes": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum like count."
            },
            "minReposts": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum repost count."
            },
            "since": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "description": "Start date in YYYY-MM-DD."
            },
            "until": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "description": "End date in YYYY-MM-DD."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum posts to return. Search is capped at 20 per call."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "query"
              ]
            },
            {
              "required": [
                "words"
              ]
            },
            {
              "required": [
                "phrase"
              ]
            },
            {
              "required": [
                "hashtags"
              ]
            },
            {
              "required": [
                "from"
              ]
            }
          ],
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 500,
              "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored."
            },
            "words": {
              "type": "string",
              "maxLength": 160,
              "description": "All words to include."
            },
            "phrase": {
              "type": "string",
              "maxLength": 160,
              "description": "Exact phrase to include."
            },
            "anyWords": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Any Words item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Any of these words may match."
            },
            "noneWords": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "None Words item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Words to exclude."
            },
            "hashtags": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 80,
                "description": "Hashtags item value for X Post Search. Constraints: max length: 80."
              },
              "maxItems": 12,
              "description": "Hashtags to include, with or without #."
            },
            "from": {
              "type": "string",
              "maxLength": 80,
              "description": "Only posts from this username."
            },
            "to": {
              "type": "string",
              "maxLength": 80,
              "description": "Only replies to this username."
            },
            "mentioning": {
              "type": "string",
              "maxLength": 80,
              "description": "Only posts mentioning this username."
            },
            "minReplies": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum reply count."
            },
            "minLikes": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum like count."
            },
            "minReposts": {
              "type": "integer",
              "minimum": 0,
              "description": "Minimum repost count."
            },
            "since": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "description": "Start date in YYYY-MM-DD."
            },
            "until": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "description": "End date in YYYY-MM-DD."
            },
            "maxResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum posts to return. Search is capped at 20 per call."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "words",
            "phrase",
            "anyWords",
            "noneWords",
            "hashtags",
            "from",
            "to",
            "mentioning",
            "minReplies",
            "minLikes",
            "minReposts",
            "since",
            "until",
            "maxResults"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Raw X/Twitter search query. If supplied, structured filter fields are ignored.",
              "constraints": {
                "maxLength": 500
              }
            },
            {
              "name": "words",
              "type": "string",
              "required": false,
              "description": "All words to include.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "phrase",
              "type": "string",
              "required": false,
              "description": "Exact phrase to include.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "anyWords",
              "type": "array",
              "required": false,
              "description": "Any of these words may match.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "noneWords",
              "type": "array",
              "required": false,
              "description": "Words to exclude.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "hashtags",
              "type": "array",
              "required": false,
              "description": "Hashtags to include, with or without #.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "from",
              "type": "string",
              "required": false,
              "description": "Only posts from this username.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "to",
              "type": "string",
              "required": false,
              "description": "Only replies to this username.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "mentioning",
              "type": "string",
              "required": false,
              "description": "Only posts mentioning this username.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "minReplies",
              "type": "integer",
              "required": false,
              "description": "Minimum reply count.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "minLikes",
              "type": "integer",
              "required": false,
              "description": "Minimum like count.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "minReposts",
              "type": "integer",
              "required": false,
              "description": "Minimum repost count.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "since",
              "type": "string",
              "required": false,
              "description": "Start date in YYYY-MM-DD."
            },
            {
              "name": "until",
              "type": "string",
              "required": false,
              "description": "End date in YYYY-MM-DD."
            },
            {
              "name": "maxResults",
              "type": "integer",
              "required": false,
              "description": "Maximum posts to return. Search is capped at 20 per call.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 20
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "from": "OpenAI",
            "words": "agent",
            "minLikes": 10,
            "maxResults": 5
          }
        },
        "exampleRequest": {
          "from": "OpenAI",
          "words": "agent",
          "minLikes": 10,
          "maxResults": 5
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "profile": {
              "type": "object",
              "additionalProperties": true
            },
            "tweet": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result_count": {
              "type": "integer"
            },
            "meta": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "x-tweet-search",
            "name": "X Post Search",
            "department": "Social Media"
          },
          "requested": {
            "query": "agent from:OpenAI min_faves:10",
            "maxResults": 5
          },
          "result_count": 5,
          "results": [
            {
              "id": "1110302988",
              "text": "Normalized public post text",
              "author": {
                "username": "OpenAI"
              },
              "metrics": {
                "likes": 10,
                "reposts": 2,
                "replies": 1
              }
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/outdoor-recreation-availability",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Outdoor Recreation Availability Check",
      "description": "Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.",
      "longDescription": "Purpose: Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nBest use: Use this when an agent needs check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resource, startDate, endDate.\nOptional fields: entityId, entityType, state, isLottery, filters, limit, includeMetadata, proxiesSx.\n\nAccepted fields:\n- resource (required, string): Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources.\n- entityId (optional, string): Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied.\n- entityType (optional, string): Optional known resource type. URLs usually imply this automatically. Constraints: accepted values: \"campground\", \"campsite\", \"permit\", \"timedentry\", \"timedentry_tour\".\n- state (optional, string): Optional state filter for name resolution, such as CA or California.\n- startDate (required, string): Start date in YYYY-MM-DD. For campgrounds this is the check-in date. Constraints: format: date.\n- endDate (required, string): End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout. Constraints: format: date.\n- isLottery (optional, boolean): For permits, request lottery quota/application state instead of post-draw/walk-up availability. Constraints: default: false.\n- filters (optional, object): Filters object for configuring Outdoor Recreation Availability Check. Object accepts: groupSize, siteType, equipment, rvLengthFt, electric, accessibility, petsAllowed, loop, availableOnly.\n- limit (optional, integer): Maximum matching sites, divisions, or slots to return. Constraints: default: 20; min: 1; max: 50.\n- includeMetadata (optional, boolean): For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available. Constraints: default: true.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resource\": \"Upper Pines Campground\",\n  \"state\": \"CA\",\n  \"startDate\": \"2026-06-15\",\n  \"endDate\": \"2026-06-19\",\n  \"filters\": {\n    \"siteType\": \"TENT ONLY\",\n    \"groupSize\": 4,\n    \"availableOnly\": true\n  },\n  \"limit\": 5\n}\n```",
      "category": "public-data",
      "kind": "data-job",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "outdoor-recreation",
      "aisle": "Outdoor Recreation",
      "shelfId": "outdoor-recreation",
      "shelf": "Outdoor Recreation",
      "offeringId": "outdoor-recreation-availability",
      "offering": "Outdoor Recreation Availability Check",
      "pathIds": [
        "public-data",
        "outdoor-recreation",
        "outdoor-recreation",
        "outdoor-recreation-availability"
      ],
      "pathLabels": [
        "Public Data",
        "Outdoor Recreation",
        "Outdoor Recreation",
        "Outdoor Recreation Availability Check"
      ],
      "taxonomyPath": "public-data.outdoor-recreation.outdoor-recreation.outdoor-recreation-availability",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "outdoor-recreation",
          "name": "Outdoor Recreation"
        },
        "shelf": {
          "id": "outdoor-recreation",
          "name": "Outdoor Recreation"
        },
        "offering": {
          "id": "outdoor-recreation-availability",
          "name": "Outdoor Recreation Availability Check"
        },
        "pathIds": [
          "public-data",
          "outdoor-recreation",
          "outdoor-recreation",
          "outdoor-recreation-availability"
        ],
        "pathLabels": [
          "Public Data",
          "Outdoor Recreation",
          "Outdoor Recreation",
          "Outdoor Recreation Availability Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "camping",
        "permits",
        "public-data",
        "travel",
        "availability",
        "parks"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "resource",
          "startDate",
          "endDate"
        ],
        "properties": {
          "resource": {
            "type": "string",
            "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
          },
          "entityId": {
            "type": "string",
            "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
          },
          "entityType": {
            "type": "string",
            "enum": [
              "campground",
              "campsite",
              "permit",
              "timedentry",
              "timedentry_tour"
            ],
            "description": "Optional known resource type. URLs usually imply this automatically."
          },
          "state": {
            "type": "string",
            "description": "Optional state filter for name resolution, such as CA or California."
          },
          "startDate": {
            "type": "string",
            "format": "date",
            "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date."
          },
          "endDate": {
            "type": "string",
            "format": "date",
            "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout."
          },
          "isLottery": {
            "type": "boolean",
            "default": false,
            "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability."
          },
          "filters": {
            "type": "object",
            "properties": {
              "groupSize": {
                "type": "integer",
                "minimum": 1,
                "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
              },
              "siteType": {
                "type": "string",
                "description": "Campground site type filter, such as tent only, RV, group, or standard."
              },
              "equipment": {
                "type": "string",
                "description": "Equipment name to match in permitted equipment, such as RV or tent."
              },
              "rvLengthFt": {
                "type": "integer",
                "minimum": 1,
                "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
              },
              "electric": {
                "type": "boolean",
                "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
              },
              "accessibility": {
                "type": "boolean",
                "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
              },
              "petsAllowed": {
                "type": "boolean",
                "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
              },
              "loop": {
                "type": "string",
                "description": "Loop value for Outdoor Recreation Availability Check."
              },
              "availableOnly": {
                "type": "boolean",
                "default": true,
                "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true."
              }
            },
            "additionalProperties": false,
            "description": "Filters object for configuring Outdoor Recreation Availability Check."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Maximum matching sites, divisions, or slots to return."
          },
          "includeMetadata": {
            "type": "boolean",
            "default": true,
            "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "resource",
          "startDate",
          "endDate"
        ],
        "optional": [
          "entityId",
          "entityType",
          "state",
          "isLottery",
          "filters",
          "limit",
          "includeMetadata",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "resource",
            "type": "string",
            "required": true,
            "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
          },
          {
            "name": "entityId",
            "type": "string",
            "required": false,
            "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
          },
          {
            "name": "entityType",
            "type": "string",
            "required": false,
            "description": "Optional known resource type. URLs usually imply this automatically.",
            "constraints": {
              "enum": [
                "campground",
                "campsite",
                "permit",
                "timedentry",
                "timedentry_tour"
              ]
            }
          },
          {
            "name": "state",
            "type": "string",
            "required": false,
            "description": "Optional state filter for name resolution, such as CA or California."
          },
          {
            "name": "startDate",
            "type": "string",
            "required": true,
            "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date.",
            "constraints": {
              "format": "date"
            }
          },
          {
            "name": "endDate",
            "type": "string",
            "required": true,
            "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout.",
            "constraints": {
              "format": "date"
            }
          },
          {
            "name": "isLottery",
            "type": "boolean",
            "required": false,
            "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "filters",
            "type": "object",
            "required": false,
            "description": "Filters object for configuring Outdoor Recreation Availability Check.",
            "fields": [
              {
                "name": "groupSize",
                "type": "integer",
                "required": false,
                "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                "constraints": {
                  "minimum": 1
                }
              },
              {
                "name": "siteType",
                "type": "string",
                "required": false,
                "description": "Campground site type filter, such as tent only, RV, group, or standard."
              },
              {
                "name": "equipment",
                "type": "string",
                "required": false,
                "description": "Equipment name to match in permitted equipment, such as RV or tent."
              },
              {
                "name": "rvLengthFt",
                "type": "integer",
                "required": false,
                "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                "constraints": {
                  "minimum": 1
                }
              },
              {
                "name": "electric",
                "type": "boolean",
                "required": false,
                "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
              },
              {
                "name": "accessibility",
                "type": "boolean",
                "required": false,
                "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
              },
              {
                "name": "petsAllowed",
                "type": "boolean",
                "required": false,
                "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
              },
              {
                "name": "loop",
                "type": "string",
                "required": false,
                "description": "Loop value for Outdoor Recreation Availability Check."
              },
              {
                "name": "availableOnly",
                "type": "boolean",
                "required": false,
                "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true.",
                "constraints": {
                  "default": true
                }
              }
            ]
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum matching sites, divisions, or slots to return.",
            "constraints": {
              "default": 20,
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "includeMetadata",
            "type": "boolean",
            "required": false,
            "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "resource": "Upper Pines Campground",
          "state": "CA",
          "startDate": "2026-06-15",
          "endDate": "2026-06-19",
          "filters": {
            "siteType": "TENT ONLY",
            "groupSize": 4,
            "availableOnly": true
          },
          "limit": 5
        }
      },
      "exampleRequest": {
        "resource": "Upper Pines Campground",
        "state": "CA",
        "startDate": "2026-06-15",
        "endDate": "2026-06-19",
        "filters": {
          "siteType": "TENT ONLY",
          "groupSize": 4,
          "availableOnly": true
        },
        "limit": 5
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "kind",
          "requested",
          "resolved",
          "checkedAt"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "campground",
              "campsite",
              "permit",
              "timedentry",
              "timedentry_tour"
            ]
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "resolved": {
            "type": "object",
            "additionalProperties": true
          },
          "sites": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "divisions": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "slots": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "kind": "campground",
        "resolved": {
          "entityId": "232447",
          "entityType": "campground",
          "name": "Upper Pines Campground",
          "state": "CA"
        },
        "dateRange": {
          "checkin": "2026-06-15",
          "checkout": "2026-06-19",
          "nights": 4
        },
        "sites": [
          {
            "campsite_id": "98",
            "site_number": "040",
            "loop": "Upper Pines",
            "campsite_type": "TENT ONLY NONELECTRIC",
            "max_num_people": 6,
            "pets_allowed": "Domestic",
            "availability": {
              "2026-06-15": "Available",
              "2026-06-16": "Available",
              "2026-06-17": "Reserved",
              "2026-06-18": "Available"
            }
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "resource": "Upper Pines Campground",
                "state": "CA",
                "startDate": "2026-06-15",
                "endDate": "2026-06-19",
                "filters": {
                  "siteType": "TENT ONLY",
                  "groupSize": 4,
                  "availableOnly": true
                },
                "limit": 5
              }
            },
            "output": {
              "type": "json",
              "example": {
                "kind": "campground",
                "resolved": {
                  "entityId": "232447",
                  "entityType": "campground",
                  "name": "Upper Pines Campground",
                  "state": "CA"
                },
                "dateRange": {
                  "checkin": "2026-06-15",
                  "checkout": "2026-06-19",
                  "nights": 4
                },
                "sites": [
                  {
                    "campsite_id": "98",
                    "site_number": "040",
                    "loop": "Upper Pines",
                    "campsite_type": "TENT ONLY NONELECTRIC",
                    "max_num_people": 6,
                    "pets_allowed": "Domestic",
                    "availability": {
                      "2026-06-15": "Available",
                      "2026-06-16": "Available",
                      "2026-06-17": "Reserved",
                      "2026-06-18": "Available"
                    }
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/outdoor-recreation-availability",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "resource",
                      "startDate",
                      "endDate"
                    ],
                    "properties": {
                      "resource": {
                        "type": "string",
                        "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
                      },
                      "entityId": {
                        "type": "string",
                        "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
                      },
                      "entityType": {
                        "type": "string",
                        "enum": [
                          "campground",
                          "campsite",
                          "permit",
                          "timedentry",
                          "timedentry_tour"
                        ],
                        "description": "Optional known resource type. URLs usually imply this automatically."
                      },
                      "state": {
                        "type": "string",
                        "description": "Optional state filter for name resolution, such as CA or California."
                      },
                      "startDate": {
                        "type": "string",
                        "format": "date",
                        "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date."
                      },
                      "endDate": {
                        "type": "string",
                        "format": "date",
                        "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout."
                      },
                      "isLottery": {
                        "type": "boolean",
                        "default": false,
                        "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability."
                      },
                      "filters": {
                        "type": "object",
                        "properties": {
                          "groupSize": {
                            "type": "integer",
                            "minimum": 1,
                            "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                          },
                          "siteType": {
                            "type": "string",
                            "description": "Campground site type filter, such as tent only, RV, group, or standard."
                          },
                          "equipment": {
                            "type": "string",
                            "description": "Equipment name to match in permitted equipment, such as RV or tent."
                          },
                          "rvLengthFt": {
                            "type": "integer",
                            "minimum": 1,
                            "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                          },
                          "electric": {
                            "type": "boolean",
                            "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                          },
                          "accessibility": {
                            "type": "boolean",
                            "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                          },
                          "petsAllowed": {
                            "type": "boolean",
                            "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                          },
                          "loop": {
                            "type": "string",
                            "description": "Loop value for Outdoor Recreation Availability Check."
                          },
                          "availableOnly": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true."
                          }
                        },
                        "additionalProperties": false,
                        "description": "Filters object for configuring Outdoor Recreation Availability Check."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 50,
                        "default": 20,
                        "description": "Maximum matching sites, divisions, or slots to return."
                      },
                      "includeMetadata": {
                        "type": "boolean",
                        "default": true,
                        "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "kind",
                      "requested",
                      "resolved",
                      "checkedAt"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "enum": [
                          "campground",
                          "campsite",
                          "permit",
                          "timedentry",
                          "timedentry_tour"
                        ]
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "resolved": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "sites": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "divisions": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "slots": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "outdoor-recreation-availability",
            "url": "https://agentbodega.store/api/public-data/outdoor-recreation-availability",
            "method": "POST",
            "description": "Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.",
            "longDescription": "Purpose: Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nBest use: Use this when an agent needs check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resource, startDate, endDate.\nOptional fields: entityId, entityType, state, isLottery, filters, limit, includeMetadata, proxiesSx.\n\nAccepted fields:\n- resource (required, string): Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources.\n- entityId (optional, string): Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied.\n- entityType (optional, string): Optional known resource type. URLs usually imply this automatically. Constraints: accepted values: \"campground\", \"campsite\", \"permit\", \"timedentry\", \"timedentry_tour\".\n- state (optional, string): Optional state filter for name resolution, such as CA or California.\n- startDate (required, string): Start date in YYYY-MM-DD. For campgrounds this is the check-in date. Constraints: format: date.\n- endDate (required, string): End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout. Constraints: format: date.\n- isLottery (optional, boolean): For permits, request lottery quota/application state instead of post-draw/walk-up availability. Constraints: default: false.\n- filters (optional, object): Filters object for configuring Outdoor Recreation Availability Check. Object accepts: groupSize, siteType, equipment, rvLengthFt, electric, accessibility, petsAllowed, loop, availableOnly.\n- limit (optional, integer): Maximum matching sites, divisions, or slots to return. Constraints: default: 20; min: 1; max: 50.\n- includeMetadata (optional, boolean): For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available. Constraints: default: true.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resource\": \"Upper Pines Campground\",\n  \"state\": \"CA\",\n  \"startDate\": \"2026-06-15\",\n  \"endDate\": \"2026-06-19\",\n  \"filters\": {\n    \"siteType\": \"TENT ONLY\",\n    \"groupSize\": 4,\n    \"availableOnly\": true\n  },\n  \"limit\": 5\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Outdoor Recreation Availability Check",
            "category": "public-data",
            "kind": "data-job",
            "tags": [
              "camping",
              "permits",
              "public-data",
              "travel",
              "availability",
              "parks"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "resource",
                "startDate",
                "endDate"
              ],
              "optional": [
                "entityId",
                "entityType",
                "state",
                "isLottery",
                "filters",
                "limit",
                "includeMetadata",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "resource",
                  "type": "string",
                  "required": true,
                  "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
                },
                {
                  "name": "entityId",
                  "type": "string",
                  "required": false,
                  "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
                },
                {
                  "name": "entityType",
                  "type": "string",
                  "required": false,
                  "description": "Optional known resource type. URLs usually imply this automatically.",
                  "constraints": {
                    "enum": [
                      "campground",
                      "campsite",
                      "permit",
                      "timedentry",
                      "timedentry_tour"
                    ]
                  }
                },
                {
                  "name": "state",
                  "type": "string",
                  "required": false,
                  "description": "Optional state filter for name resolution, such as CA or California."
                },
                {
                  "name": "startDate",
                  "type": "string",
                  "required": true,
                  "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date.",
                  "constraints": {
                    "format": "date"
                  }
                },
                {
                  "name": "endDate",
                  "type": "string",
                  "required": true,
                  "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout.",
                  "constraints": {
                    "format": "date"
                  }
                },
                {
                  "name": "isLottery",
                  "type": "boolean",
                  "required": false,
                  "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "filters",
                  "type": "object",
                  "required": false,
                  "description": "Filters object for configuring Outdoor Recreation Availability Check.",
                  "fields": [
                    {
                      "name": "groupSize",
                      "type": "integer",
                      "required": false,
                      "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                      "constraints": {
                        "minimum": 1
                      }
                    },
                    {
                      "name": "siteType",
                      "type": "string",
                      "required": false,
                      "description": "Campground site type filter, such as tent only, RV, group, or standard."
                    },
                    {
                      "name": "equipment",
                      "type": "string",
                      "required": false,
                      "description": "Equipment name to match in permitted equipment, such as RV or tent."
                    },
                    {
                      "name": "rvLengthFt",
                      "type": "integer",
                      "required": false,
                      "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                      "constraints": {
                        "minimum": 1
                      }
                    },
                    {
                      "name": "electric",
                      "type": "boolean",
                      "required": false,
                      "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                    },
                    {
                      "name": "accessibility",
                      "type": "boolean",
                      "required": false,
                      "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                    },
                    {
                      "name": "petsAllowed",
                      "type": "boolean",
                      "required": false,
                      "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                    },
                    {
                      "name": "loop",
                      "type": "string",
                      "required": false,
                      "description": "Loop value for Outdoor Recreation Availability Check."
                    },
                    {
                      "name": "availableOnly",
                      "type": "boolean",
                      "required": false,
                      "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true.",
                      "constraints": {
                        "default": true
                      }
                    }
                  ]
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum matching sites, divisions, or slots to return.",
                  "constraints": {
                    "default": 20,
                    "minimum": 1,
                    "maximum": 50
                  }
                },
                {
                  "name": "includeMetadata",
                  "type": "boolean",
                  "required": false,
                  "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "resource": "Upper Pines Campground",
                "state": "CA",
                "startDate": "2026-06-15",
                "endDate": "2026-06-19",
                "filters": {
                  "siteType": "TENT ONLY",
                  "groupSize": 4,
                  "availableOnly": true
                },
                "limit": 5
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "resource",
                "startDate",
                "endDate"
              ],
              "properties": {
                "resource": {
                  "type": "string",
                  "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
                },
                "entityId": {
                  "type": "string",
                  "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
                },
                "entityType": {
                  "type": "string",
                  "enum": [
                    "campground",
                    "campsite",
                    "permit",
                    "timedentry",
                    "timedentry_tour"
                  ],
                  "description": "Optional known resource type. URLs usually imply this automatically."
                },
                "state": {
                  "type": "string",
                  "description": "Optional state filter for name resolution, such as CA or California."
                },
                "startDate": {
                  "type": "string",
                  "format": "date",
                  "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date."
                },
                "endDate": {
                  "type": "string",
                  "format": "date",
                  "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout."
                },
                "isLottery": {
                  "type": "boolean",
                  "default": false,
                  "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability."
                },
                "filters": {
                  "type": "object",
                  "properties": {
                    "groupSize": {
                      "type": "integer",
                      "minimum": 1,
                      "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                    },
                    "siteType": {
                      "type": "string",
                      "description": "Campground site type filter, such as tent only, RV, group, or standard."
                    },
                    "equipment": {
                      "type": "string",
                      "description": "Equipment name to match in permitted equipment, such as RV or tent."
                    },
                    "rvLengthFt": {
                      "type": "integer",
                      "minimum": 1,
                      "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                    },
                    "electric": {
                      "type": "boolean",
                      "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                    },
                    "accessibility": {
                      "type": "boolean",
                      "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                    },
                    "petsAllowed": {
                      "type": "boolean",
                      "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                    },
                    "loop": {
                      "type": "string",
                      "description": "Loop value for Outdoor Recreation Availability Check."
                    },
                    "availableOnly": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true."
                    }
                  },
                  "additionalProperties": false,
                  "description": "Filters object for configuring Outdoor Recreation Availability Check."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 50,
                  "default": 20,
                  "description": "Maximum matching sites, divisions, or slots to return."
                },
                "includeMetadata": {
                  "type": "boolean",
                  "default": true,
                  "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "kind",
                "requested",
                "resolved",
                "checkedAt"
              ],
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "campground",
                    "campsite",
                    "permit",
                    "timedentry",
                    "timedentry_tour"
                  ]
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "resolved": {
                  "type": "object",
                  "additionalProperties": true
                },
                "sites": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "divisions": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "slots": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/outdoor-recreation-availability",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/outdoor-recreation-availability",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "data-job",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "outdoor-recreation",
          "aisle": "Outdoor Recreation",
          "shelfId": "outdoor-recreation",
          "shelf": "Outdoor Recreation",
          "offeringId": "outdoor-recreation-availability",
          "offering": "Outdoor Recreation Availability Check",
          "pathIds": [
            "public-data",
            "outdoor-recreation",
            "outdoor-recreation",
            "outdoor-recreation-availability"
          ],
          "pathLabels": [
            "Public Data",
            "Outdoor Recreation",
            "Outdoor Recreation",
            "Outdoor Recreation Availability Check"
          ],
          "taxonomyPath": "public-data.outdoor-recreation.outdoor-recreation.outdoor-recreation-availability",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "outdoor-recreation",
              "name": "Outdoor Recreation"
            },
            "shelf": {
              "id": "outdoor-recreation",
              "name": "Outdoor Recreation"
            },
            "offering": {
              "id": "outdoor-recreation-availability",
              "name": "Outdoor Recreation Availability Check"
            },
            "pathIds": [
              "public-data",
              "outdoor-recreation",
              "outdoor-recreation",
              "outdoor-recreation-availability"
            ],
            "pathLabels": [
              "Public Data",
              "Outdoor Recreation",
              "Outdoor Recreation",
              "Outdoor Recreation Availability Check"
            ]
          }
        },
        "description": {
          "short": "Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.",
          "full": "Purpose: Check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nBest use: Use this when an agent needs check live public recreation availability for campgrounds, campsites, permits, lotteries, tours, and timed-entry resources over a bounded date range.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resource, startDate, endDate.\nOptional fields: entityId, entityType, state, isLottery, filters, limit, includeMetadata, proxiesSx.\n\nAccepted fields:\n- resource (required, string): Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources.\n- entityId (optional, string): Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied.\n- entityType (optional, string): Optional known resource type. URLs usually imply this automatically. Constraints: accepted values: \"campground\", \"campsite\", \"permit\", \"timedentry\", \"timedentry_tour\".\n- state (optional, string): Optional state filter for name resolution, such as CA or California.\n- startDate (required, string): Start date in YYYY-MM-DD. For campgrounds this is the check-in date. Constraints: format: date.\n- endDate (required, string): End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout. Constraints: format: date.\n- isLottery (optional, boolean): For permits, request lottery quota/application state instead of post-draw/walk-up availability. Constraints: default: false.\n- filters (optional, object): Filters object for configuring Outdoor Recreation Availability Check. Object accepts: groupSize, siteType, equipment, rvLengthFt, electric, accessibility, petsAllowed, loop, availableOnly.\n- limit (optional, integer): Maximum matching sites, divisions, or slots to return. Constraints: default: 20; min: 1; max: 50.\n- includeMetadata (optional, boolean): For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available. Constraints: default: true.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resource\": \"Upper Pines Campground\",\n  \"state\": \"CA\",\n  \"startDate\": \"2026-06-15\",\n  \"endDate\": \"2026-06-19\",\n  \"filters\": {\n    \"siteType\": \"TENT ONLY\",\n    \"groupSize\": 4,\n    \"availableOnly\": true\n  },\n  \"limit\": 5\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "resource",
            "startDate",
            "endDate"
          ],
          "properties": {
            "resource": {
              "type": "string",
              "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
            },
            "entityId": {
              "type": "string",
              "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
            },
            "entityType": {
              "type": "string",
              "enum": [
                "campground",
                "campsite",
                "permit",
                "timedentry",
                "timedentry_tour"
              ],
              "description": "Optional known resource type. URLs usually imply this automatically."
            },
            "state": {
              "type": "string",
              "description": "Optional state filter for name resolution, such as CA or California."
            },
            "startDate": {
              "type": "string",
              "format": "date",
              "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date."
            },
            "endDate": {
              "type": "string",
              "format": "date",
              "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout."
            },
            "isLottery": {
              "type": "boolean",
              "default": false,
              "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability."
            },
            "filters": {
              "type": "object",
              "properties": {
                "groupSize": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                },
                "siteType": {
                  "type": "string",
                  "description": "Campground site type filter, such as tent only, RV, group, or standard."
                },
                "equipment": {
                  "type": "string",
                  "description": "Equipment name to match in permitted equipment, such as RV or tent."
                },
                "rvLengthFt": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                },
                "electric": {
                  "type": "boolean",
                  "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                },
                "accessibility": {
                  "type": "boolean",
                  "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                },
                "petsAllowed": {
                  "type": "boolean",
                  "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                },
                "loop": {
                  "type": "string",
                  "description": "Loop value for Outdoor Recreation Availability Check."
                },
                "availableOnly": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true."
                }
              },
              "additionalProperties": false,
              "description": "Filters object for configuring Outdoor Recreation Availability Check."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20,
              "description": "Maximum matching sites, divisions, or slots to return."
            },
            "includeMetadata": {
              "type": "boolean",
              "default": true,
              "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "resource",
            "startDate",
            "endDate"
          ],
          "properties": {
            "resource": {
              "type": "string",
              "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
            },
            "entityId": {
              "type": "string",
              "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
            },
            "entityType": {
              "type": "string",
              "enum": [
                "campground",
                "campsite",
                "permit",
                "timedentry",
                "timedentry_tour"
              ],
              "description": "Optional known resource type. URLs usually imply this automatically."
            },
            "state": {
              "type": "string",
              "description": "Optional state filter for name resolution, such as CA or California."
            },
            "startDate": {
              "type": "string",
              "format": "date",
              "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date."
            },
            "endDate": {
              "type": "string",
              "format": "date",
              "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout."
            },
            "isLottery": {
              "type": "boolean",
              "default": false,
              "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability."
            },
            "filters": {
              "type": "object",
              "properties": {
                "groupSize": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                },
                "siteType": {
                  "type": "string",
                  "description": "Campground site type filter, such as tent only, RV, group, or standard."
                },
                "equipment": {
                  "type": "string",
                  "description": "Equipment name to match in permitted equipment, such as RV or tent."
                },
                "rvLengthFt": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1."
                },
                "electric": {
                  "type": "boolean",
                  "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                },
                "accessibility": {
                  "type": "boolean",
                  "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                },
                "petsAllowed": {
                  "type": "boolean",
                  "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                },
                "loop": {
                  "type": "string",
                  "description": "Loop value for Outdoor Recreation Availability Check."
                },
                "availableOnly": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true."
                }
              },
              "additionalProperties": false,
              "description": "Filters object for configuring Outdoor Recreation Availability Check."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20,
              "description": "Maximum matching sites, divisions, or slots to return."
            },
            "includeMetadata": {
              "type": "boolean",
              "default": true,
              "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "resource",
            "startDate",
            "endDate"
          ],
          "optional": [
            "entityId",
            "entityType",
            "state",
            "isLottery",
            "filters",
            "limit",
            "includeMetadata",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "resource",
              "type": "string",
              "required": true,
              "description": "Outdoor recreation resource name or canonical reservation URL. Supports campground, campsite, permit, lottery, timed-entry, and tour resources."
            },
            {
              "name": "entityId",
              "type": "string",
              "required": false,
              "description": "Optional known facility, campsite, permit, or timed-entry id. Skips name resolution when supplied."
            },
            {
              "name": "entityType",
              "type": "string",
              "required": false,
              "description": "Optional known resource type. URLs usually imply this automatically.",
              "constraints": {
                "enum": [
                  "campground",
                  "campsite",
                  "permit",
                  "timedentry",
                  "timedentry_tour"
                ]
              }
            },
            {
              "name": "state",
              "type": "string",
              "required": false,
              "description": "Optional state filter for name resolution, such as CA or California."
            },
            {
              "name": "startDate",
              "type": "string",
              "required": true,
              "description": "Start date in YYYY-MM-DD. For campgrounds this is the check-in date.",
              "constraints": {
                "format": "date"
              }
            },
            {
              "name": "endDate",
              "type": "string",
              "required": true,
              "description": "End date in YYYY-MM-DD. For campgrounds this is the checkout date; returned availability covers nights before checkout.",
              "constraints": {
                "format": "date"
              }
            },
            {
              "name": "isLottery",
              "type": "boolean",
              "required": false,
              "description": "For permits, request lottery quota/application state instead of post-draw/walk-up availability.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "filters",
              "type": "object",
              "required": false,
              "description": "Filters object for configuring Outdoor Recreation Availability Check.",
              "fields": [
                {
                  "name": "groupSize",
                  "type": "integer",
                  "required": false,
                  "description": "Group Size numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                  "constraints": {
                    "minimum": 1
                  }
                },
                {
                  "name": "siteType",
                  "type": "string",
                  "required": false,
                  "description": "Campground site type filter, such as tent only, RV, group, or standard."
                },
                {
                  "name": "equipment",
                  "type": "string",
                  "required": false,
                  "description": "Equipment name to match in permitted equipment, such as RV or tent."
                },
                {
                  "name": "rvLengthFt",
                  "type": "integer",
                  "required": false,
                  "description": "Rv Length Ft numeric value for Outdoor Recreation Availability Check. Constraints: min: 1.",
                  "constraints": {
                    "minimum": 1
                  }
                },
                {
                  "name": "electric",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable electric behavior for Outdoor Recreation Availability Check."
                },
                {
                  "name": "accessibility",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable accessibility behavior for Outdoor Recreation Availability Check."
                },
                {
                  "name": "petsAllowed",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable pets allowed behavior for Outdoor Recreation Availability Check."
                },
                {
                  "name": "loop",
                  "type": "string",
                  "required": false,
                  "description": "Loop value for Outdoor Recreation Availability Check."
                },
                {
                  "name": "availableOnly",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable available only behavior for Outdoor Recreation Availability Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                }
              ]
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum matching sites, divisions, or slots to return.",
              "constraints": {
                "default": 20,
                "minimum": 1,
                "maximum": 50
              }
            },
            {
              "name": "includeMetadata",
              "type": "boolean",
              "required": false,
              "description": "For campgrounds/campsites, include site/facility metadata such as equipment, accessibility, pet policy, and fees when available.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "resource": "Upper Pines Campground",
            "state": "CA",
            "startDate": "2026-06-15",
            "endDate": "2026-06-19",
            "filters": {
              "siteType": "TENT ONLY",
              "groupSize": 4,
              "availableOnly": true
            },
            "limit": 5
          }
        },
        "exampleRequest": {
          "resource": "Upper Pines Campground",
          "state": "CA",
          "startDate": "2026-06-15",
          "endDate": "2026-06-19",
          "filters": {
            "siteType": "TENT ONLY",
            "groupSize": 4,
            "availableOnly": true
          },
          "limit": 5
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "kind",
            "requested",
            "resolved",
            "checkedAt"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "campground",
                "campsite",
                "permit",
                "timedentry",
                "timedentry_tour"
              ]
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "resolved": {
              "type": "object",
              "additionalProperties": true
            },
            "sites": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "divisions": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "slots": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "kind",
            "requested",
            "resolved",
            "checkedAt"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "campground",
                "campsite",
                "permit",
                "timedentry",
                "timedentry_tour"
              ]
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "resolved": {
              "type": "object",
              "additionalProperties": true
            },
            "sites": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "divisions": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "slots": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "kind": "campground",
          "resolved": {
            "entityId": "232447",
            "entityType": "campground",
            "name": "Upper Pines Campground",
            "state": "CA"
          },
          "dateRange": {
            "checkin": "2026-06-15",
            "checkout": "2026-06-19",
            "nights": 4
          },
          "sites": [
            {
              "campsite_id": "98",
              "site_number": "040",
              "loop": "Upper Pines",
              "campsite_type": "TENT ONLY NONELECTRIC",
              "max_num_people": 6,
              "pets_allowed": "Domestic",
              "availability": {
                "2026-06-15": "Available",
                "2026-06-16": "Available",
                "2026-06-17": "Reserved",
                "2026-06-18": "Available"
              }
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/news-headlines/search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "News Headline Search",
      "description": "Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.",
      "longDescription": "Purpose: Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nBest use: Use this when an agent needs search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: topic, publisher, query, hours, limit, includeContent, minSentiment, maxSentiment, sort.\n\nAccepted fields:\n- topic (optional, string): Optional news topic filter. Use all for the full managed index. Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"; default: \"all\".\n- publisher (optional, string): Optional publisher/feed id filter when the caller already knows the feed label to narrow. Constraints: max length: 80.\n- query (optional, string): Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords. Constraints: max length: 160.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 24 hours and is capped at 24. Constraints: default: 24; min: 1; max: 24.\n- limit (optional, integer): Maximum headline rows to return after filtering and sorting. Constraints: default: 10; min: 1; max: 50.\n- includeContent (optional, boolean): Set true to include a capped cleaned content excerpt when available. Constraints: default: false.\n- minSentiment (optional, number): Optional lower bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- maxSentiment (optional, number): Optional upper bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- sort (optional, string): Sort order for returned headlines. Constraints: accepted values: \"published_desc\", \"published_asc\", \"sentiment_desc\", \"sentiment_asc\"; default: \"published_desc\".\n\nExample request body:\n```json\n{\n  \"topic\": \"tech\",\n  \"query\": \"ai\",\n  \"hours\": 6,\n  \"limit\": 10,\n  \"sort\": \"published_desc\",\n  \"includeContent\": false\n}\n```",
      "category": "public-data",
      "kind": "news-search-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "news",
      "aisle": "News",
      "shelfId": "headlines",
      "shelf": "Headlines",
      "offeringId": "news-headline-search",
      "offering": "News Headline Search",
      "pathIds": [
        "public-data",
        "news",
        "headlines",
        "news-headline-search"
      ],
      "pathLabels": [
        "Public Data",
        "News",
        "Headlines",
        "News Headline Search"
      ],
      "taxonomyPath": "public-data.news.headlines.news-headline-search",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "news",
          "name": "News"
        },
        "shelf": {
          "id": "headlines",
          "name": "Headlines"
        },
        "offering": {
          "id": "news-headline-search",
          "name": "News Headline Search"
        },
        "pathIds": [
          "public-data",
          "news",
          "headlines",
          "news-headline-search"
        ],
        "pathLabels": [
          "Public Data",
          "News",
          "Headlines",
          "News Headline Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "public-data",
        "news",
        "headlines",
        "current-events",
        "topic-filter",
        "sentiment",
        "publisher-links",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "topic": {
            "type": "string",
            "enum": [
              "all",
              "tech",
              "news",
              "business",
              "science",
              "gaming",
              "culture",
              "politics",
              "sports"
            ],
            "default": "all",
            "description": "Optional news topic filter. Use all for the full managed index."
          },
          "publisher": {
            "type": "string",
            "maxLength": 80,
            "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow."
          },
          "query": {
            "type": "string",
            "maxLength": 160,
            "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords."
          },
          "hours": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24,
            "default": 24,
            "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum headline rows to return after filtering and sorting."
          },
          "includeContent": {
            "type": "boolean",
            "default": false,
            "description": "Set true to include a capped cleaned content excerpt when available."
          },
          "minSentiment": {
            "type": "number",
            "minimum": -1,
            "maximum": 1,
            "description": "Optional lower bound for compound sentiment from -1 to 1."
          },
          "maxSentiment": {
            "type": "number",
            "minimum": -1,
            "maximum": 1,
            "description": "Optional upper bound for compound sentiment from -1 to 1."
          },
          "sort": {
            "type": "string",
            "enum": [
              "published_desc",
              "published_asc",
              "sentiment_desc",
              "sentiment_asc"
            ],
            "default": "published_desc",
            "description": "Sort order for returned headlines."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "topic",
          "publisher",
          "query",
          "hours",
          "limit",
          "includeContent",
          "minSentiment",
          "maxSentiment",
          "sort"
        ],
        "fields": [
          {
            "name": "topic",
            "type": "string",
            "required": false,
            "description": "Optional news topic filter. Use all for the full managed index.",
            "constraints": {
              "enum": [
                "all",
                "tech",
                "news",
                "business",
                "science",
                "gaming",
                "culture",
                "politics",
                "sports"
              ],
              "default": "all"
            }
          },
          {
            "name": "publisher",
            "type": "string",
            "required": false,
            "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "hours",
            "type": "integer",
            "required": false,
            "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24.",
            "constraints": {
              "default": 24,
              "minimum": 1,
              "maximum": 24
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum headline rows to return after filtering and sorting.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "includeContent",
            "type": "boolean",
            "required": false,
            "description": "Set true to include a capped cleaned content excerpt when available.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "minSentiment",
            "type": "number",
            "required": false,
            "description": "Optional lower bound for compound sentiment from -1 to 1.",
            "constraints": {
              "minimum": -1,
              "maximum": 1
            }
          },
          {
            "name": "maxSentiment",
            "type": "number",
            "required": false,
            "description": "Optional upper bound for compound sentiment from -1 to 1.",
            "constraints": {
              "minimum": -1,
              "maximum": 1
            }
          },
          {
            "name": "sort",
            "type": "string",
            "required": false,
            "description": "Sort order for returned headlines.",
            "constraints": {
              "enum": [
                "published_desc",
                "published_asc",
                "sentiment_desc",
                "sentiment_asc"
              ],
              "default": "published_desc"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "topic": "tech",
          "query": "ai",
          "hours": 6,
          "limit": 10,
          "sort": "published_desc",
          "includeContent": false
        }
      },
      "exampleRequest": {
        "topic": "tech",
        "query": "ai",
        "hours": 6,
        "limit": 10,
        "sort": "published_desc",
        "includeContent": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "feed",
          "count",
          "headlines",
          "limits",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True when headline search completed."
          },
          "tool": {
            "type": "object",
            "additionalProperties": true,
            "description": "AgentBodega tool metadata."
          },
          "requested": {
            "type": "object",
            "additionalProperties": true,
            "description": "Normalized request filters and caps."
          },
          "feed": {
            "type": "object",
            "additionalProperties": true,
            "description": "Whitelabeled managed index metadata; backend provider URLs are not disclosed."
          },
          "count": {
            "type": "integer",
            "description": "Number of headline rows returned."
          },
          "headlines": {
            "type": "array",
            "description": "Normalized headline rows.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable upstream row id or deterministic fallback."
                },
                "title": {
                  "type": "string",
                  "description": "Headline title."
                },
                "description": {
                  "type": "string",
                  "description": "Short article description or summary."
                },
                "url": {
                  "type": "string",
                  "description": "Publisher article URL."
                },
                "topic": {
                  "type": "string",
                  "description": "Assigned topic bucket."
                },
                "publisher": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Publisher/feed label when available."
                },
                "publishedAt": {
                  "type": "string",
                  "description": "Article publish timestamp when available."
                },
                "insertedAt": {
                  "type": "string",
                  "description": "Index insertion timestamp when available."
                },
                "age": {
                  "type": "string",
                  "description": "Short relative age label from the managed index."
                },
                "keywords": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Keyword labels when available."
                },
                "sentiment": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Compound, positive, negative, and neutral sentiment hints when available."
                },
                "contentText": {
                  "type": "string",
                  "description": "Optional capped cleaned content excerpt when includeContent is true."
                }
              },
              "additionalProperties": true
            }
          },
          "limits": {
            "type": "object",
            "additionalProperties": true,
            "description": "Published caps for this route."
          },
          "checkedAt": {
            "type": "string",
            "description": "Server-side ISO timestamp for this search."
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "news-headline-search",
          "name": "News Headline Search",
          "department": "Public Data"
        },
        "requested": {
          "topic": "tech",
          "query": "ai",
          "hours": 6,
          "limit": 10,
          "sort": "published_desc",
          "includeContent": false
        },
        "feed": {
          "type": "managed-news-index",
          "windowHours": 6,
          "upstreamDetailsDisclosed": false,
          "storyDedupeApplied": true
        },
        "count": 1,
        "headlines": [
          {
            "id": "headline_example",
            "title": "AI infrastructure startup announces new agent workflow tools",
            "description": "The company described new tools for faster agent research and data retrieval.",
            "url": "https://publisher.example/news/ai-agent-workflow-tools",
            "topic": "tech",
            "publisher": {
              "id": "publisher-example",
              "domain": "publisher.example"
            },
            "publishedAt": "2026-07-07T19:35:14.000Z",
            "insertedAt": "2026-07-07T19:36:00.000Z",
            "age": "24m",
            "keywords": [
              "AI",
              "agents",
              "workflow"
            ],
            "sentiment": {
              "compound": 0.12,
              "positive": 0.18,
              "negative": 0.02,
              "neutral": 0.8
            }
          }
        ],
        "limits": {
          "maxLimit": 50,
          "maxLookbackHours": 24,
          "maxContentChars": 1500
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "topic": "tech",
                "query": "ai",
                "hours": 6,
                "limit": 10,
                "sort": "published_desc",
                "includeContent": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "news-headline-search",
                  "name": "News Headline Search",
                  "department": "Public Data"
                },
                "requested": {
                  "topic": "tech",
                  "query": "ai",
                  "hours": 6,
                  "limit": 10,
                  "sort": "published_desc",
                  "includeContent": false
                },
                "feed": {
                  "type": "managed-news-index",
                  "windowHours": 6,
                  "upstreamDetailsDisclosed": false,
                  "storyDedupeApplied": true
                },
                "count": 1,
                "headlines": [
                  {
                    "id": "headline_example",
                    "title": "AI infrastructure startup announces new agent workflow tools",
                    "description": "The company described new tools for faster agent research and data retrieval.",
                    "url": "https://publisher.example/news/ai-agent-workflow-tools",
                    "topic": "tech",
                    "publisher": {
                      "id": "publisher-example",
                      "domain": "publisher.example"
                    },
                    "publishedAt": "2026-07-07T19:35:14.000Z",
                    "insertedAt": "2026-07-07T19:36:00.000Z",
                    "age": "24m",
                    "keywords": [
                      "AI",
                      "agents",
                      "workflow"
                    ],
                    "sentiment": {
                      "compound": 0.12,
                      "positive": 0.18,
                      "negative": 0.02,
                      "neutral": 0.8
                    }
                  }
                ],
                "limits": {
                  "maxLimit": 50,
                  "maxLookbackHours": 24,
                  "maxContentChars": 1500
                }
              }
            }
          },
          "routeTemplate": "/api/public-data/news-headlines/search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "topic": {
                        "type": "string",
                        "enum": [
                          "all",
                          "tech",
                          "news",
                          "business",
                          "science",
                          "gaming",
                          "culture",
                          "politics",
                          "sports"
                        ],
                        "default": "all",
                        "description": "Optional news topic filter. Use all for the full managed index."
                      },
                      "publisher": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow."
                      },
                      "query": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords."
                      },
                      "hours": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 24,
                        "default": 24,
                        "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 50,
                        "default": 10,
                        "description": "Maximum headline rows to return after filtering and sorting."
                      },
                      "includeContent": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to include a capped cleaned content excerpt when available."
                      },
                      "minSentiment": {
                        "type": "number",
                        "minimum": -1,
                        "maximum": 1,
                        "description": "Optional lower bound for compound sentiment from -1 to 1."
                      },
                      "maxSentiment": {
                        "type": "number",
                        "minimum": -1,
                        "maximum": 1,
                        "description": "Optional upper bound for compound sentiment from -1 to 1."
                      },
                      "sort": {
                        "type": "string",
                        "enum": [
                          "published_desc",
                          "published_asc",
                          "sentiment_desc",
                          "sentiment_asc"
                        ],
                        "default": "published_desc",
                        "description": "Sort order for returned headlines."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "feed",
                      "count",
                      "headlines",
                      "limits",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True when headline search completed."
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "AgentBodega tool metadata."
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Normalized request filters and caps."
                      },
                      "feed": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Whitelabeled managed index metadata; backend provider URLs are not disclosed."
                      },
                      "count": {
                        "type": "integer",
                        "description": "Number of headline rows returned."
                      },
                      "headlines": {
                        "type": "array",
                        "description": "Normalized headline rows.",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "description": "Stable upstream row id or deterministic fallback."
                            },
                            "title": {
                              "type": "string",
                              "description": "Headline title."
                            },
                            "description": {
                              "type": "string",
                              "description": "Short article description or summary."
                            },
                            "url": {
                              "type": "string",
                              "description": "Publisher article URL."
                            },
                            "topic": {
                              "type": "string",
                              "description": "Assigned topic bucket."
                            },
                            "publisher": {
                              "type": "object",
                              "additionalProperties": true,
                              "description": "Publisher/feed label when available."
                            },
                            "publishedAt": {
                              "type": "string",
                              "description": "Article publish timestamp when available."
                            },
                            "insertedAt": {
                              "type": "string",
                              "description": "Index insertion timestamp when available."
                            },
                            "age": {
                              "type": "string",
                              "description": "Short relative age label from the managed index."
                            },
                            "keywords": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "description": "Keyword labels when available."
                            },
                            "sentiment": {
                              "type": "object",
                              "additionalProperties": true,
                              "description": "Compound, positive, negative, and neutral sentiment hints when available."
                            },
                            "contentText": {
                              "type": "string",
                              "description": "Optional capped cleaned content excerpt when includeContent is true."
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Published caps for this route."
                      },
                      "checkedAt": {
                        "type": "string",
                        "description": "Server-side ISO timestamp for this search."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "news-headline-search",
            "url": "https://agentbodega.store/api/public-data/news-headlines/search",
            "method": "POST",
            "description": "Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.",
            "longDescription": "Purpose: Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nBest use: Use this when an agent needs search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: topic, publisher, query, hours, limit, includeContent, minSentiment, maxSentiment, sort.\n\nAccepted fields:\n- topic (optional, string): Optional news topic filter. Use all for the full managed index. Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"; default: \"all\".\n- publisher (optional, string): Optional publisher/feed id filter when the caller already knows the feed label to narrow. Constraints: max length: 80.\n- query (optional, string): Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords. Constraints: max length: 160.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 24 hours and is capped at 24. Constraints: default: 24; min: 1; max: 24.\n- limit (optional, integer): Maximum headline rows to return after filtering and sorting. Constraints: default: 10; min: 1; max: 50.\n- includeContent (optional, boolean): Set true to include a capped cleaned content excerpt when available. Constraints: default: false.\n- minSentiment (optional, number): Optional lower bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- maxSentiment (optional, number): Optional upper bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- sort (optional, string): Sort order for returned headlines. Constraints: accepted values: \"published_desc\", \"published_asc\", \"sentiment_desc\", \"sentiment_asc\"; default: \"published_desc\".\n\nExample request body:\n```json\n{\n  \"topic\": \"tech\",\n  \"query\": \"ai\",\n  \"hours\": 6,\n  \"limit\": 10,\n  \"sort\": \"published_desc\",\n  \"includeContent\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "News Headline Search",
            "category": "public-data",
            "kind": "news-search-tool",
            "tags": [
              "public-data",
              "news",
              "headlines",
              "current-events",
              "topic-filter",
              "sentiment",
              "publisher-links",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "topic",
                "publisher",
                "query",
                "hours",
                "limit",
                "includeContent",
                "minSentiment",
                "maxSentiment",
                "sort"
              ],
              "fields": [
                {
                  "name": "topic",
                  "type": "string",
                  "required": false,
                  "description": "Optional news topic filter. Use all for the full managed index.",
                  "constraints": {
                    "enum": [
                      "all",
                      "tech",
                      "news",
                      "business",
                      "science",
                      "gaming",
                      "culture",
                      "politics",
                      "sports"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "publisher",
                  "type": "string",
                  "required": false,
                  "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "hours",
                  "type": "integer",
                  "required": false,
                  "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24.",
                  "constraints": {
                    "default": 24,
                    "minimum": 1,
                    "maximum": 24
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum headline rows to return after filtering and sorting.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 50
                  }
                },
                {
                  "name": "includeContent",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to include a capped cleaned content excerpt when available.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "minSentiment",
                  "type": "number",
                  "required": false,
                  "description": "Optional lower bound for compound sentiment from -1 to 1.",
                  "constraints": {
                    "minimum": -1,
                    "maximum": 1
                  }
                },
                {
                  "name": "maxSentiment",
                  "type": "number",
                  "required": false,
                  "description": "Optional upper bound for compound sentiment from -1 to 1.",
                  "constraints": {
                    "minimum": -1,
                    "maximum": 1
                  }
                },
                {
                  "name": "sort",
                  "type": "string",
                  "required": false,
                  "description": "Sort order for returned headlines.",
                  "constraints": {
                    "enum": [
                      "published_desc",
                      "published_asc",
                      "sentiment_desc",
                      "sentiment_asc"
                    ],
                    "default": "published_desc"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "topic": "tech",
                "query": "ai",
                "hours": 6,
                "limit": 10,
                "sort": "published_desc",
                "includeContent": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "topic": {
                  "type": "string",
                  "enum": [
                    "all",
                    "tech",
                    "news",
                    "business",
                    "science",
                    "gaming",
                    "culture",
                    "politics",
                    "sports"
                  ],
                  "default": "all",
                  "description": "Optional news topic filter. Use all for the full managed index."
                },
                "publisher": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow."
                },
                "query": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords."
                },
                "hours": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 24,
                  "default": 24,
                  "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 50,
                  "default": 10,
                  "description": "Maximum headline rows to return after filtering and sorting."
                },
                "includeContent": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to include a capped cleaned content excerpt when available."
                },
                "minSentiment": {
                  "type": "number",
                  "minimum": -1,
                  "maximum": 1,
                  "description": "Optional lower bound for compound sentiment from -1 to 1."
                },
                "maxSentiment": {
                  "type": "number",
                  "minimum": -1,
                  "maximum": 1,
                  "description": "Optional upper bound for compound sentiment from -1 to 1."
                },
                "sort": {
                  "type": "string",
                  "enum": [
                    "published_desc",
                    "published_asc",
                    "sentiment_desc",
                    "sentiment_asc"
                  ],
                  "default": "published_desc",
                  "description": "Sort order for returned headlines."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "feed",
                "count",
                "headlines",
                "limits",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True when headline search completed."
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "AgentBodega tool metadata."
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Normalized request filters and caps."
                },
                "feed": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Whitelabeled managed index metadata; backend provider URLs are not disclosed."
                },
                "count": {
                  "type": "integer",
                  "description": "Number of headline rows returned."
                },
                "headlines": {
                  "type": "array",
                  "description": "Normalized headline rows.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Stable upstream row id or deterministic fallback."
                      },
                      "title": {
                        "type": "string",
                        "description": "Headline title."
                      },
                      "description": {
                        "type": "string",
                        "description": "Short article description or summary."
                      },
                      "url": {
                        "type": "string",
                        "description": "Publisher article URL."
                      },
                      "topic": {
                        "type": "string",
                        "description": "Assigned topic bucket."
                      },
                      "publisher": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Publisher/feed label when available."
                      },
                      "publishedAt": {
                        "type": "string",
                        "description": "Article publish timestamp when available."
                      },
                      "insertedAt": {
                        "type": "string",
                        "description": "Index insertion timestamp when available."
                      },
                      "age": {
                        "type": "string",
                        "description": "Short relative age label from the managed index."
                      },
                      "keywords": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "Keyword labels when available."
                      },
                      "sentiment": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Compound, positive, negative, and neutral sentiment hints when available."
                      },
                      "contentText": {
                        "type": "string",
                        "description": "Optional capped cleaned content excerpt when includeContent is true."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Published caps for this route."
                },
                "checkedAt": {
                  "type": "string",
                  "description": "Server-side ISO timestamp for this search."
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/news-headlines/search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/news-headlines/search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "news-search-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "news",
          "aisle": "News",
          "shelfId": "headlines",
          "shelf": "Headlines",
          "offeringId": "news-headline-search",
          "offering": "News Headline Search",
          "pathIds": [
            "public-data",
            "news",
            "headlines",
            "news-headline-search"
          ],
          "pathLabels": [
            "Public Data",
            "News",
            "Headlines",
            "News Headline Search"
          ],
          "taxonomyPath": "public-data.news.headlines.news-headline-search",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "news",
              "name": "News"
            },
            "shelf": {
              "id": "headlines",
              "name": "Headlines"
            },
            "offering": {
              "id": "news-headline-search",
              "name": "News Headline Search"
            },
            "pathIds": [
              "public-data",
              "news",
              "headlines",
              "news-headline-search"
            ],
            "pathLabels": [
              "Public Data",
              "News",
              "Headlines",
              "News Headline Search"
            ]
          }
        },
        "description": {
          "short": "Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.",
          "full": "Purpose: Search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nBest use: Use this when an agent needs search a managed public news index by topic, publisher label, lookback window, keyword query, sentiment bounds, and sort order; returns normalized headline rows with publisher article URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: topic, publisher, query, hours, limit, includeContent, minSentiment, maxSentiment, sort.\n\nAccepted fields:\n- topic (optional, string): Optional news topic filter. Use all for the full managed index. Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"; default: \"all\".\n- publisher (optional, string): Optional publisher/feed id filter when the caller already knows the feed label to narrow. Constraints: max length: 80.\n- query (optional, string): Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords. Constraints: max length: 160.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 24 hours and is capped at 24. Constraints: default: 24; min: 1; max: 24.\n- limit (optional, integer): Maximum headline rows to return after filtering and sorting. Constraints: default: 10; min: 1; max: 50.\n- includeContent (optional, boolean): Set true to include a capped cleaned content excerpt when available. Constraints: default: false.\n- minSentiment (optional, number): Optional lower bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- maxSentiment (optional, number): Optional upper bound for compound sentiment from -1 to 1. Constraints: min: -1; max: 1.\n- sort (optional, string): Sort order for returned headlines. Constraints: accepted values: \"published_desc\", \"published_asc\", \"sentiment_desc\", \"sentiment_asc\"; default: \"published_desc\".\n\nExample request body:\n```json\n{\n  \"topic\": \"tech\",\n  \"query\": \"ai\",\n  \"hours\": 6,\n  \"limit\": 10,\n  \"sort\": \"published_desc\",\n  \"includeContent\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "topic": {
              "type": "string",
              "enum": [
                "all",
                "tech",
                "news",
                "business",
                "science",
                "gaming",
                "culture",
                "politics",
                "sports"
              ],
              "default": "all",
              "description": "Optional news topic filter. Use all for the full managed index."
            },
            "publisher": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow."
            },
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords."
            },
            "hours": {
              "type": "integer",
              "minimum": 1,
              "maximum": 24,
              "default": 24,
              "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10,
              "description": "Maximum headline rows to return after filtering and sorting."
            },
            "includeContent": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include a capped cleaned content excerpt when available."
            },
            "minSentiment": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Optional lower bound for compound sentiment from -1 to 1."
            },
            "maxSentiment": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Optional upper bound for compound sentiment from -1 to 1."
            },
            "sort": {
              "type": "string",
              "enum": [
                "published_desc",
                "published_asc",
                "sentiment_desc",
                "sentiment_asc"
              ],
              "default": "published_desc",
              "description": "Sort order for returned headlines."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "topic": {
              "type": "string",
              "enum": [
                "all",
                "tech",
                "news",
                "business",
                "science",
                "gaming",
                "culture",
                "politics",
                "sports"
              ],
              "default": "all",
              "description": "Optional news topic filter. Use all for the full managed index."
            },
            "publisher": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow."
            },
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords."
            },
            "hours": {
              "type": "integer",
              "minimum": 1,
              "maximum": 24,
              "default": 24,
              "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10,
              "description": "Maximum headline rows to return after filtering and sorting."
            },
            "includeContent": {
              "type": "boolean",
              "default": false,
              "description": "Set true to include a capped cleaned content excerpt when available."
            },
            "minSentiment": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Optional lower bound for compound sentiment from -1 to 1."
            },
            "maxSentiment": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Optional upper bound for compound sentiment from -1 to 1."
            },
            "sort": {
              "type": "string",
              "enum": [
                "published_desc",
                "published_asc",
                "sentiment_desc",
                "sentiment_asc"
              ],
              "default": "published_desc",
              "description": "Sort order for returned headlines."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "topic",
            "publisher",
            "query",
            "hours",
            "limit",
            "includeContent",
            "minSentiment",
            "maxSentiment",
            "sort"
          ],
          "fields": [
            {
              "name": "topic",
              "type": "string",
              "required": false,
              "description": "Optional news topic filter. Use all for the full managed index.",
              "constraints": {
                "enum": [
                  "all",
                  "tech",
                  "news",
                  "business",
                  "science",
                  "gaming",
                  "culture",
                  "politics",
                  "sports"
                ],
                "default": "all"
              }
            },
            {
              "name": "publisher",
              "type": "string",
              "required": false,
              "description": "Optional publisher/feed id filter when the caller already knows the feed label to narrow.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional case-insensitive text filter matched against title, description, topic, publisher id, URL, and keywords.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "hours",
              "type": "integer",
              "required": false,
              "description": "Lookback window in hours. Defaults to the last 24 hours and is capped at 24.",
              "constraints": {
                "default": 24,
                "minimum": 1,
                "maximum": 24
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum headline rows to return after filtering and sorting.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 50
              }
            },
            {
              "name": "includeContent",
              "type": "boolean",
              "required": false,
              "description": "Set true to include a capped cleaned content excerpt when available.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "minSentiment",
              "type": "number",
              "required": false,
              "description": "Optional lower bound for compound sentiment from -1 to 1.",
              "constraints": {
                "minimum": -1,
                "maximum": 1
              }
            },
            {
              "name": "maxSentiment",
              "type": "number",
              "required": false,
              "description": "Optional upper bound for compound sentiment from -1 to 1.",
              "constraints": {
                "minimum": -1,
                "maximum": 1
              }
            },
            {
              "name": "sort",
              "type": "string",
              "required": false,
              "description": "Sort order for returned headlines.",
              "constraints": {
                "enum": [
                  "published_desc",
                  "published_asc",
                  "sentiment_desc",
                  "sentiment_asc"
                ],
                "default": "published_desc"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "topic": "tech",
            "query": "ai",
            "hours": 6,
            "limit": 10,
            "sort": "published_desc",
            "includeContent": false
          }
        },
        "exampleRequest": {
          "topic": "tech",
          "query": "ai",
          "hours": 6,
          "limit": 10,
          "sort": "published_desc",
          "includeContent": false
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "feed",
            "count",
            "headlines",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when headline search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "feed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Whitelabeled managed index metadata; backend provider URLs are not disclosed."
            },
            "count": {
              "type": "integer",
              "description": "Number of headline rows returned."
            },
            "headlines": {
              "type": "array",
              "description": "Normalized headline rows.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable upstream row id or deterministic fallback."
                  },
                  "title": {
                    "type": "string",
                    "description": "Headline title."
                  },
                  "description": {
                    "type": "string",
                    "description": "Short article description or summary."
                  },
                  "url": {
                    "type": "string",
                    "description": "Publisher article URL."
                  },
                  "topic": {
                    "type": "string",
                    "description": "Assigned topic bucket."
                  },
                  "publisher": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Publisher/feed label when available."
                  },
                  "publishedAt": {
                    "type": "string",
                    "description": "Article publish timestamp when available."
                  },
                  "insertedAt": {
                    "type": "string",
                    "description": "Index insertion timestamp when available."
                  },
                  "age": {
                    "type": "string",
                    "description": "Short relative age label from the managed index."
                  },
                  "keywords": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Keyword labels when available."
                  },
                  "sentiment": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Compound, positive, negative, and neutral sentiment hints when available."
                  },
                  "contentText": {
                    "type": "string",
                    "description": "Optional capped cleaned content excerpt when includeContent is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for this search."
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "feed",
            "count",
            "headlines",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when headline search completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "feed": {
              "type": "object",
              "additionalProperties": true,
              "description": "Whitelabeled managed index metadata; backend provider URLs are not disclosed."
            },
            "count": {
              "type": "integer",
              "description": "Number of headline rows returned."
            },
            "headlines": {
              "type": "array",
              "description": "Normalized headline rows.",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable upstream row id or deterministic fallback."
                  },
                  "title": {
                    "type": "string",
                    "description": "Headline title."
                  },
                  "description": {
                    "type": "string",
                    "description": "Short article description or summary."
                  },
                  "url": {
                    "type": "string",
                    "description": "Publisher article URL."
                  },
                  "topic": {
                    "type": "string",
                    "description": "Assigned topic bucket."
                  },
                  "publisher": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Publisher/feed label when available."
                  },
                  "publishedAt": {
                    "type": "string",
                    "description": "Article publish timestamp when available."
                  },
                  "insertedAt": {
                    "type": "string",
                    "description": "Index insertion timestamp when available."
                  },
                  "age": {
                    "type": "string",
                    "description": "Short relative age label from the managed index."
                  },
                  "keywords": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Keyword labels when available."
                  },
                  "sentiment": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Compound, positive, negative, and neutral sentiment hints when available."
                  },
                  "contentText": {
                    "type": "string",
                    "description": "Optional capped cleaned content excerpt when includeContent is true."
                  }
                },
                "additionalProperties": true
              }
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for this search."
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "news-headline-search",
            "name": "News Headline Search",
            "department": "Public Data"
          },
          "requested": {
            "topic": "tech",
            "query": "ai",
            "hours": 6,
            "limit": 10,
            "sort": "published_desc",
            "includeContent": false
          },
          "feed": {
            "type": "managed-news-index",
            "windowHours": 6,
            "upstreamDetailsDisclosed": false,
            "storyDedupeApplied": true
          },
          "count": 1,
          "headlines": [
            {
              "id": "headline_example",
              "title": "AI infrastructure startup announces new agent workflow tools",
              "description": "The company described new tools for faster agent research and data retrieval.",
              "url": "https://publisher.example/news/ai-agent-workflow-tools",
              "topic": "tech",
              "publisher": {
                "id": "publisher-example",
                "domain": "publisher.example"
              },
              "publishedAt": "2026-07-07T19:35:14.000Z",
              "insertedAt": "2026-07-07T19:36:00.000Z",
              "age": "24m",
              "keywords": [
                "AI",
                "agents",
                "workflow"
              ],
              "sentiment": {
                "compound": 0.12,
                "positive": 0.18,
                "negative": 0.02,
                "neutral": 0.8
              }
            }
          ],
          "limits": {
            "maxLimit": 50,
            "maxLookbackHours": 24,
            "maxContentChars": 1500
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/news-briefing/summary",
      "type": "http",
      "x402Version": 2,
      "serviceName": "News Briefing Summary",
      "description": "Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.",
      "longDescription": "Purpose: Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nBest use: Use this when an agent needs return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, limit.\n\nAccepted fields:\n- query (optional, string): Optional case-insensitive filter matched against briefing titles and summary text. Constraints: max length: 160.\n- limit (optional, integer): Maximum briefing items to return. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"query\": \"technology\",\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "news-briefing-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "news",
      "aisle": "News",
      "shelfId": "briefings",
      "shelf": "Briefings",
      "offeringId": "news-briefing-summary",
      "offering": "News Briefing Summary",
      "pathIds": [
        "public-data",
        "news",
        "briefings",
        "news-briefing-summary"
      ],
      "pathLabels": [
        "Public Data",
        "News",
        "Briefings",
        "News Briefing Summary"
      ],
      "taxonomyPath": "public-data.news.briefings.news-briefing-summary",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "news",
          "name": "News"
        },
        "shelf": {
          "id": "briefings",
          "name": "Briefings"
        },
        "offering": {
          "id": "news-briefing-summary",
          "name": "News Briefing Summary"
        },
        "pathIds": [
          "public-data",
          "news",
          "briefings",
          "news-briefing-summary"
        ],
        "pathLabels": [
          "Public Data",
          "News",
          "Briefings",
          "News Briefing Summary"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "public-data",
        "news",
        "briefing",
        "summary",
        "current-events",
        "situational-awareness",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 160,
            "description": "Optional case-insensitive filter matched against briefing titles and summary text."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 10,
            "description": "Maximum briefing items to return."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "limit"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Optional case-insensitive filter matched against briefing titles and summary text.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Maximum briefing items to return.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 20
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "technology",
          "limit": 10
        }
      },
      "exampleRequest": {
        "query": "technology",
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "briefing",
          "count",
          "items",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True when the briefing was parsed."
          },
          "tool": {
            "type": "object",
            "additionalProperties": true,
            "description": "AgentBodega tool metadata."
          },
          "requested": {
            "type": "object",
            "additionalProperties": true,
            "description": "Normalized request filters and caps."
          },
          "briefing": {
            "type": "object",
            "additionalProperties": true,
            "description": "Whitelabeled briefing metadata and refresh cadence."
          },
          "count": {
            "type": "integer",
            "description": "Number of briefing items returned."
          },
          "items": {
            "type": "array",
            "description": "Briefing items in source order.",
            "items": {
              "type": "object",
              "required": [
                "rank",
                "title",
                "summary"
              ],
              "properties": {
                "rank": {
                  "type": "integer",
                  "description": "One-based rank in the briefing."
                },
                "title": {
                  "type": "string",
                  "description": "Briefing topic or headline."
                },
                "summary": {
                  "type": "string",
                  "description": "Compact summary of the development."
                }
              },
              "additionalProperties": false
            }
          },
          "checkedAt": {
            "type": "string",
            "description": "Server-side ISO timestamp for this briefing fetch."
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "news-briefing-summary",
          "name": "News Briefing Summary",
          "department": "Public Data"
        },
        "requested": {
          "query": "technology",
          "limit": 10
        },
        "briefing": {
          "window": "rolling_24h",
          "refreshCadence": "multiple-times-daily",
          "upstreamDetailsDisclosed": false
        },
        "count": 1,
        "items": [
          {
            "rank": 1,
            "title": "Technology stocks rebound",
            "summary": "Several technology names recovered after new product announcements and stronger demand commentary."
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "technology",
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "news-briefing-summary",
                  "name": "News Briefing Summary",
                  "department": "Public Data"
                },
                "requested": {
                  "query": "technology",
                  "limit": 10
                },
                "briefing": {
                  "window": "rolling_24h",
                  "refreshCadence": "multiple-times-daily",
                  "upstreamDetailsDisclosed": false
                },
                "count": 1,
                "items": [
                  {
                    "rank": 1,
                    "title": "Technology stocks rebound",
                    "summary": "Several technology names recovered after new product announcements and stronger demand commentary."
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/news-briefing/summary",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Optional case-insensitive filter matched against briefing titles and summary text."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 10,
                        "description": "Maximum briefing items to return."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "briefing",
                      "count",
                      "items",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True when the briefing was parsed."
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "AgentBodega tool metadata."
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Normalized request filters and caps."
                      },
                      "briefing": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Whitelabeled briefing metadata and refresh cadence."
                      },
                      "count": {
                        "type": "integer",
                        "description": "Number of briefing items returned."
                      },
                      "items": {
                        "type": "array",
                        "description": "Briefing items in source order.",
                        "items": {
                          "type": "object",
                          "required": [
                            "rank",
                            "title",
                            "summary"
                          ],
                          "properties": {
                            "rank": {
                              "type": "integer",
                              "description": "One-based rank in the briefing."
                            },
                            "title": {
                              "type": "string",
                              "description": "Briefing topic or headline."
                            },
                            "summary": {
                              "type": "string",
                              "description": "Compact summary of the development."
                            }
                          },
                          "additionalProperties": false
                        }
                      },
                      "checkedAt": {
                        "type": "string",
                        "description": "Server-side ISO timestamp for this briefing fetch."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "news-briefing-summary",
            "url": "https://agentbodega.store/api/public-data/news-briefing/summary",
            "method": "POST",
            "description": "Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.",
            "longDescription": "Purpose: Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nBest use: Use this when an agent needs return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, limit.\n\nAccepted fields:\n- query (optional, string): Optional case-insensitive filter matched against briefing titles and summary text. Constraints: max length: 160.\n- limit (optional, integer): Maximum briefing items to return. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"query\": \"technology\",\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "News Briefing Summary",
            "category": "public-data",
            "kind": "news-briefing-tool",
            "tags": [
              "public-data",
              "news",
              "briefing",
              "summary",
              "current-events",
              "situational-awareness",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "limit"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Optional case-insensitive filter matched against briefing titles and summary text.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum briefing items to return.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 20
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "technology",
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "query": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional case-insensitive filter matched against briefing titles and summary text."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 10,
                  "description": "Maximum briefing items to return."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "briefing",
                "count",
                "items",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True when the briefing was parsed."
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "AgentBodega tool metadata."
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Normalized request filters and caps."
                },
                "briefing": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Whitelabeled briefing metadata and refresh cadence."
                },
                "count": {
                  "type": "integer",
                  "description": "Number of briefing items returned."
                },
                "items": {
                  "type": "array",
                  "description": "Briefing items in source order.",
                  "items": {
                    "type": "object",
                    "required": [
                      "rank",
                      "title",
                      "summary"
                    ],
                    "properties": {
                      "rank": {
                        "type": "integer",
                        "description": "One-based rank in the briefing."
                      },
                      "title": {
                        "type": "string",
                        "description": "Briefing topic or headline."
                      },
                      "summary": {
                        "type": "string",
                        "description": "Compact summary of the development."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "checkedAt": {
                  "type": "string",
                  "description": "Server-side ISO timestamp for this briefing fetch."
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/news-briefing/summary",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/news-briefing/summary",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "news-briefing-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "news",
          "aisle": "News",
          "shelfId": "briefings",
          "shelf": "Briefings",
          "offeringId": "news-briefing-summary",
          "offering": "News Briefing Summary",
          "pathIds": [
            "public-data",
            "news",
            "briefings",
            "news-briefing-summary"
          ],
          "pathLabels": [
            "Public Data",
            "News",
            "Briefings",
            "News Briefing Summary"
          ],
          "taxonomyPath": "public-data.news.briefings.news-briefing-summary",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "news",
              "name": "News"
            },
            "shelf": {
              "id": "briefings",
              "name": "Briefings"
            },
            "offering": {
              "id": "news-briefing-summary",
              "name": "News Briefing Summary"
            },
            "pathIds": [
              "public-data",
              "news",
              "briefings",
              "news-briefing-summary"
            ],
            "pathLabels": [
              "Public Data",
              "News",
              "Briefings",
              "News Briefing Summary"
            ]
          }
        },
        "description": {
          "short": "Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.",
          "full": "Purpose: Return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nBest use: Use this when an agent needs return a compact rolling public-news briefing with ranked items, titles, and summaries; supports a small text filter and capped item count for fast agent context.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, limit.\n\nAccepted fields:\n- query (optional, string): Optional case-insensitive filter matched against briefing titles and summary text. Constraints: max length: 160.\n- limit (optional, integer): Maximum briefing items to return. Constraints: default: 10; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"query\": \"technology\",\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional case-insensitive filter matched against briefing titles and summary text."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum briefing items to return."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional case-insensitive filter matched against briefing titles and summary text."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "description": "Maximum briefing items to return."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "limit"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Optional case-insensitive filter matched against briefing titles and summary text.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Maximum briefing items to return.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 20
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "technology",
            "limit": 10
          }
        },
        "exampleRequest": {
          "query": "technology",
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "briefing",
            "count",
            "items",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the briefing was parsed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "briefing": {
              "type": "object",
              "additionalProperties": true,
              "description": "Whitelabeled briefing metadata and refresh cadence."
            },
            "count": {
              "type": "integer",
              "description": "Number of briefing items returned."
            },
            "items": {
              "type": "array",
              "description": "Briefing items in source order.",
              "items": {
                "type": "object",
                "required": [
                  "rank",
                  "title",
                  "summary"
                ],
                "properties": {
                  "rank": {
                    "type": "integer",
                    "description": "One-based rank in the briefing."
                  },
                  "title": {
                    "type": "string",
                    "description": "Briefing topic or headline."
                  },
                  "summary": {
                    "type": "string",
                    "description": "Compact summary of the development."
                  }
                },
                "additionalProperties": false
              }
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for this briefing fetch."
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "briefing",
            "count",
            "items",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the briefing was parsed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "briefing": {
              "type": "object",
              "additionalProperties": true,
              "description": "Whitelabeled briefing metadata and refresh cadence."
            },
            "count": {
              "type": "integer",
              "description": "Number of briefing items returned."
            },
            "items": {
              "type": "array",
              "description": "Briefing items in source order.",
              "items": {
                "type": "object",
                "required": [
                  "rank",
                  "title",
                  "summary"
                ],
                "properties": {
                  "rank": {
                    "type": "integer",
                    "description": "One-based rank in the briefing."
                  },
                  "title": {
                    "type": "string",
                    "description": "Briefing topic or headline."
                  },
                  "summary": {
                    "type": "string",
                    "description": "Compact summary of the development."
                  }
                },
                "additionalProperties": false
              }
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for this briefing fetch."
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "news-briefing-summary",
            "name": "News Briefing Summary",
            "department": "Public Data"
          },
          "requested": {
            "query": "technology",
            "limit": 10
          },
          "briefing": {
            "window": "rolling_24h",
            "refreshCadence": "multiple-times-daily",
            "upstreamDetailsDisclosed": false
          },
          "count": 1,
          "items": [
            {
              "rank": 1,
              "title": "Technology stocks rebound",
              "summary": "Several technology names recovered after new product announcements and stronger demand commentary."
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/news/morning-briefing",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Morning Briefing",
      "description": "Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.",
      "longDescription": "Purpose: Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nBest use: Use this when an agent needs build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: focus, topics, hours, maxItemsPerSection, includeCitations.\n\nAccepted fields:\n- focus (optional, string): Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name. Constraints: max length: 160.\n- topics (optional, array): Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index. Constraints: max items: 6.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 12 hours and is capped at 24. Constraints: default: 12; min: 1; max: 24.\n- maxItemsPerSection (optional, integer): Maximum normalized headline rows returned in each briefing section. Constraints: default: 4; min: 1; max: 8.\n- includeCitations (optional, boolean): Set false to omit the flattened citation list while keeping URLs on section items. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"focus\": \"ai markets\",\n  \"topics\": [\n    \"news\",\n    \"business\",\n    \"tech\"\n  ],\n  \"hours\": 12,\n  \"maxItemsPerSection\": 4,\n  \"includeCitations\": true\n}\n```",
      "category": "public-data",
      "kind": "news-briefing-bundle",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "news",
      "aisle": "News",
      "shelfId": "briefings",
      "shelf": "Briefings",
      "offeringId": "news-morning-briefing",
      "offering": "Morning Briefing",
      "pathIds": [
        "public-data",
        "news",
        "briefings",
        "news-morning-briefing"
      ],
      "pathLabels": [
        "Public Data",
        "News",
        "Briefings",
        "Morning Briefing"
      ],
      "taxonomyPath": "public-data.news.briefings.news-morning-briefing",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "news",
          "name": "News"
        },
        "shelf": {
          "id": "briefings",
          "name": "Briefings"
        },
        "offering": {
          "id": "news-morning-briefing",
          "name": "Morning Briefing"
        },
        "pathIds": [
          "public-data",
          "news",
          "briefings",
          "news-morning-briefing"
        ],
        "pathLabels": [
          "Public Data",
          "News",
          "Briefings",
          "Morning Briefing"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "public-data",
        "news",
        "briefing",
        "morning-briefing",
        "markets",
        "ai",
        "crypto",
        "current-events",
        "citations",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "30000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "30000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "focus": {
            "type": "string",
            "maxLength": 160,
            "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name."
          },
          "topics": {
            "type": "array",
            "maxItems": 6,
            "items": {
              "type": "string",
              "enum": [
                "all",
                "tech",
                "news",
                "business",
                "science",
                "gaming",
                "culture",
                "politics",
                "sports"
              ],
              "description": "Topics item filter for Morning Briefing. Accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\". Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"."
            },
            "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index."
          },
          "hours": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24,
            "default": 12,
            "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24."
          },
          "maxItemsPerSection": {
            "type": "integer",
            "minimum": 1,
            "maximum": 8,
            "default": 4,
            "description": "Maximum normalized headline rows returned in each briefing section."
          },
          "includeCitations": {
            "type": "boolean",
            "default": true,
            "description": "Set false to omit the flattened citation list while keeping URLs on section items."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "focus",
          "topics",
          "hours",
          "maxItemsPerSection",
          "includeCitations"
        ],
        "fields": [
          {
            "name": "focus",
            "type": "string",
            "required": false,
            "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name.",
            "constraints": {
              "maxLength": 160
            }
          },
          {
            "name": "topics",
            "type": "array",
            "required": false,
            "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index.",
            "constraints": {
              "maxItems": 6
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "hours",
            "type": "integer",
            "required": false,
            "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24.",
            "constraints": {
              "default": 12,
              "minimum": 1,
              "maximum": 24
            }
          },
          {
            "name": "maxItemsPerSection",
            "type": "integer",
            "required": false,
            "description": "Maximum normalized headline rows returned in each briefing section.",
            "constraints": {
              "default": 4,
              "minimum": 1,
              "maximum": 8
            }
          },
          {
            "name": "includeCitations",
            "type": "boolean",
            "required": false,
            "description": "Set false to omit the flattened citation list while keeping URLs on section items.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "focus": "ai markets",
          "topics": [
            "news",
            "business",
            "tech"
          ],
          "hours": 12,
          "maxItemsPerSection": 4,
          "includeCitations": true
        }
      },
      "exampleRequest": {
        "focus": "ai markets",
        "topics": [
          "news",
          "business",
          "tech"
        ],
        "hours": 12,
        "maxItemsPerSection": 4,
        "includeCitations": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "briefing",
          "sections",
          "topStories",
          "limits",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "description": "True when the briefing completed."
          },
          "tool": {
            "type": "object",
            "additionalProperties": true,
            "description": "AgentBodega tool metadata."
          },
          "requested": {
            "type": "object",
            "additionalProperties": true,
            "description": "Normalized request filters and caps."
          },
          "briefing": {
            "type": "object",
            "additionalProperties": true,
            "description": "High-level bundle summary, ranking/diversity policy, section count, item count, and source-disclosure policy."
          },
          "sections": {
            "type": "array",
            "description": "Briefing sections grouped by agent-relevant intent.",
            "items": {
              "type": "object",
              "required": [
                "id",
                "title",
                "count",
                "items"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable section id."
                },
                "title": {
                  "type": "string",
                  "description": "Human-readable section title."
                },
                "summary": {
                  "type": "string",
                  "description": "One-line summary built from the section's highest-ranked diversified items."
                },
                "count": {
                  "type": "integer",
                  "description": "Number of items in this section."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "description": "Normalized headline rows with publisher article URLs."
                },
                "ranking": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Selection policy used for this section."
                }
              },
              "additionalProperties": true
            }
          },
          "topStories": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Highest-ranked cross-section stories."
          },
          "citations": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Flattened citation list when includeCitations is true."
          },
          "limits": {
            "type": "object",
            "additionalProperties": true,
            "description": "Published caps for this bundle route."
          },
          "checkedAt": {
            "type": "string",
            "description": "Server-side ISO timestamp for the briefing."
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "news-morning-briefing",
          "name": "Morning Briefing",
          "department": "Public Data"
        },
        "requested": {
          "focus": "ai markets",
          "topics": [
            "news",
            "business",
            "tech"
          ],
          "hours": 12,
          "maxItemsPerSection": 4,
          "includeCitations": true
        },
        "briefing": {
          "mode": "managed-news-bundle",
          "summary": "Generated 8 briefing items across 4 sections.",
          "sectionCount": 4,
          "itemCount": 8,
          "upstreamDetailsDisclosed": false,
          "resultFreshness": "live",
          "pricing": {
            "model": "x402_per_call",
            "usd": "0.03"
          },
          "ranking": {
            "strategy": "dedupe_relevance_authority_freshness_source_diversity",
            "storyDedupeApplied": true,
            "sourceDiversityApplied": true,
            "maxItemsPerPublisherPerSection": 2,
            "maxTopStoriesPerPublisher": 1
          }
        },
        "sections": [
          {
            "id": "markets",
            "title": "Markets & Business",
            "summary": "Technology stocks rebound",
            "count": 1,
            "items": [
              {
                "title": "Technology stocks rebound",
                "url": "https://publisher.example/news/technology-stocks-rebound",
                "topic": "business",
                "publishedAt": "2026-07-07T12:00:00.000Z"
              }
            ],
            "ranking": {
              "strategy": "relevance_authority_freshness_diversity",
              "sourceDiversityApplied": true,
              "maxItemsPerPublisher": 2
            }
          }
        ],
        "topStories": [
          {
            "title": "AI infrastructure startup announces new agent workflow tools",
            "url": "https://publisher.example/news/ai-agent-workflow-tools",
            "topic": "tech"
          }
        ],
        "citations": [
          {
            "section": "markets",
            "title": "Technology stocks rebound",
            "url": "https://publisher.example/news/technology-stocks-rebound"
          }
        ],
        "limits": {
          "maxLookbackHours": 24,
          "maxSections": 6,
          "maxItemsPerSection": 8,
          "maxItemsPerPublisherPerSection": 2,
          "maxFetchedHeadlines": 250
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "focus": "ai markets",
                "topics": [
                  "news",
                  "business",
                  "tech"
                ],
                "hours": 12,
                "maxItemsPerSection": 4,
                "includeCitations": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "news-morning-briefing",
                  "name": "Morning Briefing",
                  "department": "Public Data"
                },
                "requested": {
                  "focus": "ai markets",
                  "topics": [
                    "news",
                    "business",
                    "tech"
                  ],
                  "hours": 12,
                  "maxItemsPerSection": 4,
                  "includeCitations": true
                },
                "briefing": {
                  "mode": "managed-news-bundle",
                  "summary": "Generated 8 briefing items across 4 sections.",
                  "sectionCount": 4,
                  "itemCount": 8,
                  "upstreamDetailsDisclosed": false,
                  "resultFreshness": "live",
                  "pricing": {
                    "model": "x402_per_call",
                    "usd": "0.03"
                  },
                  "ranking": {
                    "strategy": "dedupe_relevance_authority_freshness_source_diversity",
                    "storyDedupeApplied": true,
                    "sourceDiversityApplied": true,
                    "maxItemsPerPublisherPerSection": 2,
                    "maxTopStoriesPerPublisher": 1
                  }
                },
                "sections": [
                  {
                    "id": "markets",
                    "title": "Markets & Business",
                    "summary": "Technology stocks rebound",
                    "count": 1,
                    "items": [
                      {
                        "title": "Technology stocks rebound",
                        "url": "https://publisher.example/news/technology-stocks-rebound",
                        "topic": "business",
                        "publishedAt": "2026-07-07T12:00:00.000Z"
                      }
                    ],
                    "ranking": {
                      "strategy": "relevance_authority_freshness_diversity",
                      "sourceDiversityApplied": true,
                      "maxItemsPerPublisher": 2
                    }
                  }
                ],
                "topStories": [
                  {
                    "title": "AI infrastructure startup announces new agent workflow tools",
                    "url": "https://publisher.example/news/ai-agent-workflow-tools",
                    "topic": "tech"
                  }
                ],
                "citations": [
                  {
                    "section": "markets",
                    "title": "Technology stocks rebound",
                    "url": "https://publisher.example/news/technology-stocks-rebound"
                  }
                ],
                "limits": {
                  "maxLookbackHours": 24,
                  "maxSections": 6,
                  "maxItemsPerSection": 8,
                  "maxItemsPerPublisherPerSection": 2,
                  "maxFetchedHeadlines": 250
                }
              }
            }
          },
          "routeTemplate": "/api/public-data/news/morning-briefing",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "focus": {
                        "type": "string",
                        "maxLength": 160,
                        "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name."
                      },
                      "topics": {
                        "type": "array",
                        "maxItems": 6,
                        "items": {
                          "type": "string",
                          "enum": [
                            "all",
                            "tech",
                            "news",
                            "business",
                            "science",
                            "gaming",
                            "culture",
                            "politics",
                            "sports"
                          ],
                          "description": "Topics item filter for Morning Briefing. Accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\". Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"."
                        },
                        "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index."
                      },
                      "hours": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 24,
                        "default": 12,
                        "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24."
                      },
                      "maxItemsPerSection": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 8,
                        "default": 4,
                        "description": "Maximum normalized headline rows returned in each briefing section."
                      },
                      "includeCitations": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set false to omit the flattened citation list while keeping URLs on section items."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "briefing",
                      "sections",
                      "topStories",
                      "limits",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean",
                        "description": "True when the briefing completed."
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "AgentBodega tool metadata."
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Normalized request filters and caps."
                      },
                      "briefing": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "High-level bundle summary, ranking/diversity policy, section count, item count, and source-disclosure policy."
                      },
                      "sections": {
                        "type": "array",
                        "description": "Briefing sections grouped by agent-relevant intent.",
                        "items": {
                          "type": "object",
                          "required": [
                            "id",
                            "title",
                            "count",
                            "items"
                          ],
                          "properties": {
                            "id": {
                              "type": "string",
                              "description": "Stable section id."
                            },
                            "title": {
                              "type": "string",
                              "description": "Human-readable section title."
                            },
                            "summary": {
                              "type": "string",
                              "description": "One-line summary built from the section's highest-ranked diversified items."
                            },
                            "count": {
                              "type": "integer",
                              "description": "Number of items in this section."
                            },
                            "items": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "additionalProperties": true
                              },
                              "description": "Normalized headline rows with publisher article URLs."
                            },
                            "ranking": {
                              "type": "object",
                              "additionalProperties": true,
                              "description": "Selection policy used for this section."
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "topStories": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        },
                        "description": "Highest-ranked cross-section stories."
                      },
                      "citations": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        },
                        "description": "Flattened citation list when includeCitations is true."
                      },
                      "limits": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Published caps for this bundle route."
                      },
                      "checkedAt": {
                        "type": "string",
                        "description": "Server-side ISO timestamp for the briefing."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "news-morning-briefing",
            "url": "https://agentbodega.store/api/public-data/news/morning-briefing",
            "method": "POST",
            "description": "Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.",
            "longDescription": "Purpose: Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nBest use: Use this when an agent needs build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: focus, topics, hours, maxItemsPerSection, includeCitations.\n\nAccepted fields:\n- focus (optional, string): Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name. Constraints: max length: 160.\n- topics (optional, array): Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index. Constraints: max items: 6.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 12 hours and is capped at 24. Constraints: default: 12; min: 1; max: 24.\n- maxItemsPerSection (optional, integer): Maximum normalized headline rows returned in each briefing section. Constraints: default: 4; min: 1; max: 8.\n- includeCitations (optional, boolean): Set false to omit the flattened citation list while keeping URLs on section items. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"focus\": \"ai markets\",\n  \"topics\": [\n    \"news\",\n    \"business\",\n    \"tech\"\n  ],\n  \"hours\": 12,\n  \"maxItemsPerSection\": 4,\n  \"includeCitations\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Morning Briefing",
            "category": "public-data",
            "kind": "news-briefing-bundle",
            "tags": [
              "public-data",
              "news",
              "briefing",
              "morning-briefing",
              "markets",
              "ai",
              "crypto",
              "current-events",
              "citations",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "focus",
                "topics",
                "hours",
                "maxItemsPerSection",
                "includeCitations"
              ],
              "fields": [
                {
                  "name": "focus",
                  "type": "string",
                  "required": false,
                  "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name.",
                  "constraints": {
                    "maxLength": 160
                  }
                },
                {
                  "name": "topics",
                  "type": "array",
                  "required": false,
                  "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index.",
                  "constraints": {
                    "maxItems": 6
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "hours",
                  "type": "integer",
                  "required": false,
                  "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24.",
                  "constraints": {
                    "default": 12,
                    "minimum": 1,
                    "maximum": 24
                  }
                },
                {
                  "name": "maxItemsPerSection",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum normalized headline rows returned in each briefing section.",
                  "constraints": {
                    "default": 4,
                    "minimum": 1,
                    "maximum": 8
                  }
                },
                {
                  "name": "includeCitations",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to omit the flattened citation list while keeping URLs on section items.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "focus": "ai markets",
                "topics": [
                  "news",
                  "business",
                  "tech"
                ],
                "hours": 12,
                "maxItemsPerSection": 4,
                "includeCitations": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "focus": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name."
                },
                "topics": {
                  "type": "array",
                  "maxItems": 6,
                  "items": {
                    "type": "string",
                    "enum": [
                      "all",
                      "tech",
                      "news",
                      "business",
                      "science",
                      "gaming",
                      "culture",
                      "politics",
                      "sports"
                    ],
                    "description": "Topics item filter for Morning Briefing. Accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\". Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"."
                  },
                  "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index."
                },
                "hours": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 24,
                  "default": 12,
                  "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24."
                },
                "maxItemsPerSection": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 8,
                  "default": 4,
                  "description": "Maximum normalized headline rows returned in each briefing section."
                },
                "includeCitations": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to omit the flattened citation list while keeping URLs on section items."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "briefing",
                "sections",
                "topStories",
                "limits",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean",
                  "description": "True when the briefing completed."
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "AgentBodega tool metadata."
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Normalized request filters and caps."
                },
                "briefing": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "High-level bundle summary, ranking/diversity policy, section count, item count, and source-disclosure policy."
                },
                "sections": {
                  "type": "array",
                  "description": "Briefing sections grouped by agent-relevant intent.",
                  "items": {
                    "type": "object",
                    "required": [
                      "id",
                      "title",
                      "count",
                      "items"
                    ],
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Stable section id."
                      },
                      "title": {
                        "type": "string",
                        "description": "Human-readable section title."
                      },
                      "summary": {
                        "type": "string",
                        "description": "One-line summary built from the section's highest-ranked diversified items."
                      },
                      "count": {
                        "type": "integer",
                        "description": "Number of items in this section."
                      },
                      "items": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        },
                        "description": "Normalized headline rows with publisher article URLs."
                      },
                      "ranking": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Selection policy used for this section."
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "topStories": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "description": "Highest-ranked cross-section stories."
                },
                "citations": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "description": "Flattened citation list when includeCitations is true."
                },
                "limits": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "Published caps for this bundle route."
                },
                "checkedAt": {
                  "type": "string",
                  "description": "Server-side ISO timestamp for the briefing."
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.03"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.03",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/news/morning-briefing",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.03"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/news/morning-briefing",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "news-briefing-bundle",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "news",
          "aisle": "News",
          "shelfId": "briefings",
          "shelf": "Briefings",
          "offeringId": "news-morning-briefing",
          "offering": "Morning Briefing",
          "pathIds": [
            "public-data",
            "news",
            "briefings",
            "news-morning-briefing"
          ],
          "pathLabels": [
            "Public Data",
            "News",
            "Briefings",
            "Morning Briefing"
          ],
          "taxonomyPath": "public-data.news.briefings.news-morning-briefing",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "news",
              "name": "News"
            },
            "shelf": {
              "id": "briefings",
              "name": "Briefings"
            },
            "offering": {
              "id": "news-morning-briefing",
              "name": "Morning Briefing"
            },
            "pathIds": [
              "public-data",
              "news",
              "briefings",
              "news-morning-briefing"
            ],
            "pathLabels": [
              "Public Data",
              "News",
              "Briefings",
              "Morning Briefing"
            ]
          }
        },
        "description": {
          "short": "Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.",
          "full": "Purpose: Build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nBest use: Use this when an agent needs build a source-neutral morning briefing from managed public news signals, grouped into agent-ready sections such as global news, markets, AI/technology, crypto, and science with citations and caps.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: focus, topics, hours, maxItemsPerSection, includeCitations.\n\nAccepted fields:\n- focus (optional, string): Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name. Constraints: max length: 160.\n- topics (optional, array): Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index. Constraints: max items: 6.\n- hours (optional, integer): Lookback window in hours. Defaults to the last 12 hours and is capped at 24. Constraints: default: 12; min: 1; max: 24.\n- maxItemsPerSection (optional, integer): Maximum normalized headline rows returned in each briefing section. Constraints: default: 4; min: 1; max: 8.\n- includeCitations (optional, boolean): Set false to omit the flattened citation list while keeping URLs on section items. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"focus\": \"ai markets\",\n  \"topics\": [\n    \"news\",\n    \"business\",\n    \"tech\"\n  ],\n  \"hours\": 12,\n  \"maxItemsPerSection\": 4,\n  \"includeCitations\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "focus": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name."
            },
            "topics": {
              "type": "array",
              "maxItems": 6,
              "items": {
                "type": "string",
                "enum": [
                  "all",
                  "tech",
                  "news",
                  "business",
                  "science",
                  "gaming",
                  "culture",
                  "politics",
                  "sports"
                ],
                "description": "Topics item filter for Morning Briefing. Accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\". Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"."
              },
              "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index."
            },
            "hours": {
              "type": "integer",
              "minimum": 1,
              "maximum": 24,
              "default": 12,
              "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24."
            },
            "maxItemsPerSection": {
              "type": "integer",
              "minimum": 1,
              "maximum": 8,
              "default": 4,
              "description": "Maximum normalized headline rows returned in each briefing section."
            },
            "includeCitations": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit the flattened citation list while keeping URLs on section items."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "focus": {
              "type": "string",
              "maxLength": 160,
              "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name."
            },
            "topics": {
              "type": "array",
              "maxItems": 6,
              "items": {
                "type": "string",
                "enum": [
                  "all",
                  "tech",
                  "news",
                  "business",
                  "science",
                  "gaming",
                  "culture",
                  "politics",
                  "sports"
                ],
                "description": "Topics item filter for Morning Briefing. Accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\". Constraints: accepted values: \"all\", \"tech\", \"news\", \"business\", \"science\", \"gaming\", \"culture\", \"politics\", \"sports\"."
              },
              "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index."
            },
            "hours": {
              "type": "integer",
              "minimum": 1,
              "maximum": 24,
              "default": 12,
              "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24."
            },
            "maxItemsPerSection": {
              "type": "integer",
              "minimum": 1,
              "maximum": 8,
              "default": 4,
              "description": "Maximum normalized headline rows returned in each briefing section."
            },
            "includeCitations": {
              "type": "boolean",
              "default": true,
              "description": "Set false to omit the flattened citation list while keeping URLs on section items."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "focus",
            "topics",
            "hours",
            "maxItemsPerSection",
            "includeCitations"
          ],
          "fields": [
            {
              "name": "focus",
              "type": "string",
              "required": false,
              "description": "Optional focus phrase for the briefing, such as AI, crypto, markets, elections, or a company name.",
              "constraints": {
                "maxLength": 160
              }
            },
            {
              "name": "topics",
              "type": "array",
              "required": false,
              "description": "Optional topic buckets to emphasize. Defaults to news, business, tech, and science. Use all to let AgentBodega select from the full index.",
              "constraints": {
                "maxItems": 6
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "hours",
              "type": "integer",
              "required": false,
              "description": "Lookback window in hours. Defaults to the last 12 hours and is capped at 24.",
              "constraints": {
                "default": 12,
                "minimum": 1,
                "maximum": 24
              }
            },
            {
              "name": "maxItemsPerSection",
              "type": "integer",
              "required": false,
              "description": "Maximum normalized headline rows returned in each briefing section.",
              "constraints": {
                "default": 4,
                "minimum": 1,
                "maximum": 8
              }
            },
            {
              "name": "includeCitations",
              "type": "boolean",
              "required": false,
              "description": "Set false to omit the flattened citation list while keeping URLs on section items.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "focus": "ai markets",
            "topics": [
              "news",
              "business",
              "tech"
            ],
            "hours": 12,
            "maxItemsPerSection": 4,
            "includeCitations": true
          }
        },
        "exampleRequest": {
          "focus": "ai markets",
          "topics": [
            "news",
            "business",
            "tech"
          ],
          "hours": 12,
          "maxItemsPerSection": 4,
          "includeCitations": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "briefing",
            "sections",
            "topStories",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the briefing completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "briefing": {
              "type": "object",
              "additionalProperties": true,
              "description": "High-level bundle summary, ranking/diversity policy, section count, item count, and source-disclosure policy."
            },
            "sections": {
              "type": "array",
              "description": "Briefing sections grouped by agent-relevant intent.",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "title",
                  "count",
                  "items"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable section id."
                  },
                  "title": {
                    "type": "string",
                    "description": "Human-readable section title."
                  },
                  "summary": {
                    "type": "string",
                    "description": "One-line summary built from the section's highest-ranked diversified items."
                  },
                  "count": {
                    "type": "integer",
                    "description": "Number of items in this section."
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Normalized headline rows with publisher article URLs."
                  },
                  "ranking": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Selection policy used for this section."
                  }
                },
                "additionalProperties": true
              }
            },
            "topStories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              },
              "description": "Highest-ranked cross-section stories."
            },
            "citations": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              },
              "description": "Flattened citation list when includeCitations is true."
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this bundle route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for the briefing."
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "briefing",
            "sections",
            "topStories",
            "limits",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean",
              "description": "True when the briefing completed."
            },
            "tool": {
              "type": "object",
              "additionalProperties": true,
              "description": "AgentBodega tool metadata."
            },
            "requested": {
              "type": "object",
              "additionalProperties": true,
              "description": "Normalized request filters and caps."
            },
            "briefing": {
              "type": "object",
              "additionalProperties": true,
              "description": "High-level bundle summary, ranking/diversity policy, section count, item count, and source-disclosure policy."
            },
            "sections": {
              "type": "array",
              "description": "Briefing sections grouped by agent-relevant intent.",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "title",
                  "count",
                  "items"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Stable section id."
                  },
                  "title": {
                    "type": "string",
                    "description": "Human-readable section title."
                  },
                  "summary": {
                    "type": "string",
                    "description": "One-line summary built from the section's highest-ranked diversified items."
                  },
                  "count": {
                    "type": "integer",
                    "description": "Number of items in this section."
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    },
                    "description": "Normalized headline rows with publisher article URLs."
                  },
                  "ranking": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Selection policy used for this section."
                  }
                },
                "additionalProperties": true
              }
            },
            "topStories": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              },
              "description": "Highest-ranked cross-section stories."
            },
            "citations": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              },
              "description": "Flattened citation list when includeCitations is true."
            },
            "limits": {
              "type": "object",
              "additionalProperties": true,
              "description": "Published caps for this bundle route."
            },
            "checkedAt": {
              "type": "string",
              "description": "Server-side ISO timestamp for the briefing."
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "news-morning-briefing",
            "name": "Morning Briefing",
            "department": "Public Data"
          },
          "requested": {
            "focus": "ai markets",
            "topics": [
              "news",
              "business",
              "tech"
            ],
            "hours": 12,
            "maxItemsPerSection": 4,
            "includeCitations": true
          },
          "briefing": {
            "mode": "managed-news-bundle",
            "summary": "Generated 8 briefing items across 4 sections.",
            "sectionCount": 4,
            "itemCount": 8,
            "upstreamDetailsDisclosed": false,
            "resultFreshness": "live",
            "pricing": {
              "model": "x402_per_call",
              "usd": "0.03"
            },
            "ranking": {
              "strategy": "dedupe_relevance_authority_freshness_source_diversity",
              "storyDedupeApplied": true,
              "sourceDiversityApplied": true,
              "maxItemsPerPublisherPerSection": 2,
              "maxTopStoriesPerPublisher": 1
            }
          },
          "sections": [
            {
              "id": "markets",
              "title": "Markets & Business",
              "summary": "Technology stocks rebound",
              "count": 1,
              "items": [
                {
                  "title": "Technology stocks rebound",
                  "url": "https://publisher.example/news/technology-stocks-rebound",
                  "topic": "business",
                  "publishedAt": "2026-07-07T12:00:00.000Z"
                }
              ],
              "ranking": {
                "strategy": "relevance_authority_freshness_diversity",
                "sourceDiversityApplied": true,
                "maxItemsPerPublisher": 2
              }
            }
          ],
          "topStories": [
            {
              "title": "AI infrastructure startup announces new agent workflow tools",
              "url": "https://publisher.example/news/ai-agent-workflow-tools",
              "topic": "tech"
            }
          ],
          "citations": [
            {
              "section": "markets",
              "title": "Technology stocks rebound",
              "url": "https://publisher.example/news/technology-stocks-rebound"
            }
          ],
          "limits": {
            "maxLookbackHours": 24,
            "maxSections": 6,
            "maxItemsPerSection": 8,
            "maxItemsPerPublisherPerSection": 2,
            "maxFetchedHeadlines": 250
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/classified-listing-search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Classified Listing Search",
      "description": "Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.",
      "longDescription": "Purpose: Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nBest use: Use this when an agent needs search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: city, category, query.\nOptional fields: sort, postal, search_distance, min_price, max_price, min_bedrooms, max_bedrooms, hasPic, bundleDuplicates, limit, proxiesSx.\n\nAccepted fields:\n- city (required, string): Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston.\n- category (required, string): Listing category abbreviation, such as sss, cta, apa, jjj, or zip.\n- query (required, string): Search text.\n- sort (optional, string): Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".\n- postal (optional, string): Optional postal code to force geo-scoping when the caller's IP region differs from the target city.\n- search_distance (optional, integer): Optional radius in miles when postal is supplied. Constraints: min: 1; max: 500.\n- min_price (optional, integer): Min price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_price (optional, integer): Max price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- min_bedrooms (optional, integer): Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_bedrooms (optional, integer): Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- hasPic (optional, boolean): Set true to enable has pic behavior for Classified Listing Search.\n- bundleDuplicates (optional, boolean): Set true to enable bundle duplicates behavior for Classified Listing Search.\n- limit (optional, integer): Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"sfbay\",\n  \"category\": \"sss\",\n  \"query\": \"bicycle\",\n  \"sort\": \"date\",\n  \"postal\": \"94103\",\n  \"search_distance\": 25,\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "marketplace-listings",
      "aisle": "Marketplace Listings",
      "shelfId": "marketplace-listings",
      "shelf": "Marketplace Listings",
      "offeringId": "classified-listing-search",
      "offering": "Classified Listing Search",
      "pathIds": [
        "public-data",
        "marketplace-listings",
        "marketplace-listings",
        "classified-listing-search"
      ],
      "pathLabels": [
        "Public Data",
        "Marketplace Listings",
        "Marketplace Listings",
        "Classified Listing Search"
      ],
      "taxonomyPath": "public-data.marketplace-listings.marketplace-listings.classified-listing-search",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "marketplace-listings",
          "name": "Marketplace Listings"
        },
        "shelf": {
          "id": "marketplace-listings",
          "name": "Marketplace Listings"
        },
        "offering": {
          "id": "classified-listing-search",
          "name": "Classified Listing Search"
        },
        "pathIds": [
          "public-data",
          "marketplace-listings",
          "marketplace-listings",
          "classified-listing-search"
        ],
        "pathLabels": [
          "Public Data",
          "Marketplace Listings",
          "Marketplace Listings",
          "Classified Listing Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "classifieds",
        "marketplace-listings",
        "local-search",
        "public-data",
        "search"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "city",
          "category",
          "query"
        ],
        "properties": {
          "city": {
            "type": "string",
            "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
          },
          "category": {
            "type": "string",
            "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
          },
          "query": {
            "type": "string",
            "description": "Search text."
          },
          "sort": {
            "type": "string",
            "enum": [
              "date",
              "rel",
              "priceasc",
              "pricedsc"
            ],
            "default": "date",
            "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\"."
          },
          "postal": {
            "type": "string",
            "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
          },
          "search_distance": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500,
            "description": "Optional radius in miles when postal is supplied."
          },
          "min_price": {
            "type": "integer",
            "minimum": 0,
            "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0."
          },
          "max_price": {
            "type": "integer",
            "minimum": 0,
            "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0."
          },
          "min_bedrooms": {
            "type": "integer",
            "minimum": 0,
            "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
          },
          "max_bedrooms": {
            "type": "integer",
            "minimum": 0,
            "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
          },
          "hasPic": {
            "type": "boolean",
            "description": "Set true to enable has pic behavior for Classified Listing Search."
          },
          "bundleDuplicates": {
            "type": "boolean",
            "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 25,
            "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "city",
          "category",
          "query"
        ],
        "optional": [
          "sort",
          "postal",
          "search_distance",
          "min_price",
          "max_price",
          "min_bedrooms",
          "max_bedrooms",
          "hasPic",
          "bundleDuplicates",
          "limit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "city",
            "type": "string",
            "required": true,
            "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
          },
          {
            "name": "category",
            "type": "string",
            "required": true,
            "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
          },
          {
            "name": "query",
            "type": "string",
            "required": true,
            "description": "Search text."
          },
          {
            "name": "sort",
            "type": "string",
            "required": false,
            "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".",
            "constraints": {
              "enum": [
                "date",
                "rel",
                "priceasc",
                "pricedsc"
              ],
              "default": "date"
            }
          },
          {
            "name": "postal",
            "type": "string",
            "required": false,
            "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
          },
          {
            "name": "search_distance",
            "type": "integer",
            "required": false,
            "description": "Optional radius in miles when postal is supplied.",
            "constraints": {
              "minimum": 1,
              "maximum": 500
            }
          },
          {
            "name": "min_price",
            "type": "integer",
            "required": false,
            "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "max_price",
            "type": "integer",
            "required": false,
            "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "min_bedrooms",
            "type": "integer",
            "required": false,
            "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "max_bedrooms",
            "type": "integer",
            "required": false,
            "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "hasPic",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable has pic behavior for Classified Listing Search."
          },
          {
            "name": "bundleDuplicates",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100.",
            "constraints": {
              "default": 25,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "city": "sfbay",
          "category": "sss",
          "query": "bicycle",
          "sort": "date",
          "postal": "94103",
          "search_distance": 25,
          "limit": 10
        }
      },
      "exampleRequest": {
        "city": "sfbay",
        "category": "sss",
        "query": "bicycle",
        "sort": "date",
        "postal": "94103",
        "search_distance": 25,
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "classified-listing-search",
          "name": "Classified Listing Search",
          "department": "Public Data"
        },
        "total_results": 5635,
        "results": [
          {
            "posting_id": 7927446618,
            "title": "Kryptonite bike chain",
            "price": "$100",
            "location": "san leandro",
            "subarea": "eby"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "city": "sfbay",
                "category": "sss",
                "query": "bicycle",
                "sort": "date",
                "postal": "94103",
                "search_distance": 25,
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "classified-listing-search",
                  "name": "Classified Listing Search",
                  "department": "Public Data"
                },
                "total_results": 5635,
                "results": [
                  {
                    "posting_id": 7927446618,
                    "title": "Kryptonite bike chain",
                    "price": "$100",
                    "location": "san leandro",
                    "subarea": "eby"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/classified-listing-search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "city",
                      "category",
                      "query"
                    ],
                    "properties": {
                      "city": {
                        "type": "string",
                        "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
                      },
                      "category": {
                        "type": "string",
                        "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
                      },
                      "query": {
                        "type": "string",
                        "description": "Search text."
                      },
                      "sort": {
                        "type": "string",
                        "enum": [
                          "date",
                          "rel",
                          "priceasc",
                          "pricedsc"
                        ],
                        "default": "date",
                        "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\"."
                      },
                      "postal": {
                        "type": "string",
                        "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
                      },
                      "search_distance": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 500,
                        "description": "Optional radius in miles when postal is supplied."
                      },
                      "min_price": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0."
                      },
                      "max_price": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0."
                      },
                      "min_bedrooms": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
                      },
                      "max_bedrooms": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
                      },
                      "hasPic": {
                        "type": "boolean",
                        "description": "Set true to enable has pic behavior for Classified Listing Search."
                      },
                      "bundleDuplicates": {
                        "type": "boolean",
                        "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100,
                        "default": 25,
                        "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "classified-listing-search",
            "url": "https://agentbodega.store/api/public-data/classified-listing-search",
            "method": "POST",
            "description": "Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.",
            "longDescription": "Purpose: Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nBest use: Use this when an agent needs search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: city, category, query.\nOptional fields: sort, postal, search_distance, min_price, max_price, min_bedrooms, max_bedrooms, hasPic, bundleDuplicates, limit, proxiesSx.\n\nAccepted fields:\n- city (required, string): Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston.\n- category (required, string): Listing category abbreviation, such as sss, cta, apa, jjj, or zip.\n- query (required, string): Search text.\n- sort (optional, string): Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".\n- postal (optional, string): Optional postal code to force geo-scoping when the caller's IP region differs from the target city.\n- search_distance (optional, integer): Optional radius in miles when postal is supplied. Constraints: min: 1; max: 500.\n- min_price (optional, integer): Min price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_price (optional, integer): Max price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- min_bedrooms (optional, integer): Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_bedrooms (optional, integer): Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- hasPic (optional, boolean): Set true to enable has pic behavior for Classified Listing Search.\n- bundleDuplicates (optional, boolean): Set true to enable bundle duplicates behavior for Classified Listing Search.\n- limit (optional, integer): Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"sfbay\",\n  \"category\": \"sss\",\n  \"query\": \"bicycle\",\n  \"sort\": \"date\",\n  \"postal\": \"94103\",\n  \"search_distance\": 25,\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Classified Listing Search",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "classifieds",
              "marketplace-listings",
              "local-search",
              "public-data",
              "search"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "city",
                "category",
                "query"
              ],
              "optional": [
                "sort",
                "postal",
                "search_distance",
                "min_price",
                "max_price",
                "min_bedrooms",
                "max_bedrooms",
                "hasPic",
                "bundleDuplicates",
                "limit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "city",
                  "type": "string",
                  "required": true,
                  "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
                },
                {
                  "name": "category",
                  "type": "string",
                  "required": true,
                  "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
                },
                {
                  "name": "query",
                  "type": "string",
                  "required": true,
                  "description": "Search text."
                },
                {
                  "name": "sort",
                  "type": "string",
                  "required": false,
                  "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".",
                  "constraints": {
                    "enum": [
                      "date",
                      "rel",
                      "priceasc",
                      "pricedsc"
                    ],
                    "default": "date"
                  }
                },
                {
                  "name": "postal",
                  "type": "string",
                  "required": false,
                  "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
                },
                {
                  "name": "search_distance",
                  "type": "integer",
                  "required": false,
                  "description": "Optional radius in miles when postal is supplied.",
                  "constraints": {
                    "minimum": 1,
                    "maximum": 500
                  }
                },
                {
                  "name": "min_price",
                  "type": "integer",
                  "required": false,
                  "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "max_price",
                  "type": "integer",
                  "required": false,
                  "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "min_bedrooms",
                  "type": "integer",
                  "required": false,
                  "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "max_bedrooms",
                  "type": "integer",
                  "required": false,
                  "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "hasPic",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable has pic behavior for Classified Listing Search."
                },
                {
                  "name": "bundleDuplicates",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100.",
                  "constraints": {
                    "default": 25,
                    "minimum": 1,
                    "maximum": 100
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "city": "sfbay",
                "category": "sss",
                "query": "bicycle",
                "sort": "date",
                "postal": "94103",
                "search_distance": 25,
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "city",
                "category",
                "query"
              ],
              "properties": {
                "city": {
                  "type": "string",
                  "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
                },
                "category": {
                  "type": "string",
                  "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
                },
                "query": {
                  "type": "string",
                  "description": "Search text."
                },
                "sort": {
                  "type": "string",
                  "enum": [
                    "date",
                    "rel",
                    "priceasc",
                    "pricedsc"
                  ],
                  "default": "date",
                  "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\"."
                },
                "postal": {
                  "type": "string",
                  "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
                },
                "search_distance": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 500,
                  "description": "Optional radius in miles when postal is supplied."
                },
                "min_price": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0."
                },
                "max_price": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0."
                },
                "min_bedrooms": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
                },
                "max_bedrooms": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
                },
                "hasPic": {
                  "type": "boolean",
                  "description": "Set true to enable has pic behavior for Classified Listing Search."
                },
                "bundleDuplicates": {
                  "type": "boolean",
                  "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100,
                  "default": 25,
                  "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/classified-listing-search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/classified-listing-search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "marketplace-listings",
          "aisle": "Marketplace Listings",
          "shelfId": "marketplace-listings",
          "shelf": "Marketplace Listings",
          "offeringId": "classified-listing-search",
          "offering": "Classified Listing Search",
          "pathIds": [
            "public-data",
            "marketplace-listings",
            "marketplace-listings",
            "classified-listing-search"
          ],
          "pathLabels": [
            "Public Data",
            "Marketplace Listings",
            "Marketplace Listings",
            "Classified Listing Search"
          ],
          "taxonomyPath": "public-data.marketplace-listings.marketplace-listings.classified-listing-search",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "marketplace-listings",
              "name": "Marketplace Listings"
            },
            "shelf": {
              "id": "marketplace-listings",
              "name": "Marketplace Listings"
            },
            "offering": {
              "id": "classified-listing-search",
              "name": "Classified Listing Search"
            },
            "pathIds": [
              "public-data",
              "marketplace-listings",
              "marketplace-listings",
              "classified-listing-search"
            ],
            "pathLabels": [
              "Public Data",
              "Marketplace Listings",
              "Marketplace Listings",
              "Classified Listing Search"
            ]
          }
        },
        "description": {
          "short": "Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.",
          "full": "Purpose: Search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nBest use: Use this when an agent needs search public classified listings by market area, category, query, and common marketplace filters; returns normalized posting titles, prices, locations, dates, and ids without exposing collection URLs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: city, category, query.\nOptional fields: sort, postal, search_distance, min_price, max_price, min_bedrooms, max_bedrooms, hasPic, bundleDuplicates, limit, proxiesSx.\n\nAccepted fields:\n- city (required, string): Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston.\n- category (required, string): Listing category abbreviation, such as sss, cta, apa, jjj, or zip.\n- query (required, string): Search text.\n- sort (optional, string): Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".\n- postal (optional, string): Optional postal code to force geo-scoping when the caller's IP region differs from the target city.\n- search_distance (optional, integer): Optional radius in miles when postal is supplied. Constraints: min: 1; max: 500.\n- min_price (optional, integer): Min price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_price (optional, integer): Max price numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- min_bedrooms (optional, integer): Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- max_bedrooms (optional, integer): Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0. Constraints: min: 0.\n- hasPic (optional, boolean): Set true to enable has pic behavior for Classified Listing Search.\n- bundleDuplicates (optional, boolean): Set true to enable bundle duplicates behavior for Classified Listing Search.\n- limit (optional, integer): Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"sfbay\",\n  \"category\": \"sss\",\n  \"query\": \"bicycle\",\n  \"sort\": \"date\",\n  \"postal\": \"94103\",\n  \"search_distance\": 25,\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "city",
            "category",
            "query"
          ],
          "properties": {
            "city": {
              "type": "string",
              "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
            },
            "category": {
              "type": "string",
              "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
            },
            "query": {
              "type": "string",
              "description": "Search text."
            },
            "sort": {
              "type": "string",
              "enum": [
                "date",
                "rel",
                "priceasc",
                "pricedsc"
              ],
              "default": "date",
              "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\"."
            },
            "postal": {
              "type": "string",
              "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
            },
            "search_distance": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "description": "Optional radius in miles when postal is supplied."
            },
            "min_price": {
              "type": "integer",
              "minimum": 0,
              "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "max_price": {
              "type": "integer",
              "minimum": 0,
              "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "min_bedrooms": {
              "type": "integer",
              "minimum": 0,
              "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "max_bedrooms": {
              "type": "integer",
              "minimum": 0,
              "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "hasPic": {
              "type": "boolean",
              "description": "Set true to enable has pic behavior for Classified Listing Search."
            },
            "bundleDuplicates": {
              "type": "boolean",
              "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "city",
            "category",
            "query"
          ],
          "properties": {
            "city": {
              "type": "string",
              "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
            },
            "category": {
              "type": "string",
              "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
            },
            "query": {
              "type": "string",
              "description": "Search text."
            },
            "sort": {
              "type": "string",
              "enum": [
                "date",
                "rel",
                "priceasc",
                "pricedsc"
              ],
              "default": "date",
              "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\"."
            },
            "postal": {
              "type": "string",
              "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
            },
            "search_distance": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "description": "Optional radius in miles when postal is supplied."
            },
            "min_price": {
              "type": "integer",
              "minimum": 0,
              "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "max_price": {
              "type": "integer",
              "minimum": 0,
              "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "min_bedrooms": {
              "type": "integer",
              "minimum": 0,
              "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "max_bedrooms": {
              "type": "integer",
              "minimum": 0,
              "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0."
            },
            "hasPic": {
              "type": "boolean",
              "description": "Set true to enable has pic behavior for Classified Listing Search."
            },
            "bundleDuplicates": {
              "type": "boolean",
              "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "city",
            "category",
            "query"
          ],
          "optional": [
            "sort",
            "postal",
            "search_distance",
            "min_price",
            "max_price",
            "min_bedrooms",
            "max_bedrooms",
            "hasPic",
            "bundleDuplicates",
            "limit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "city",
              "type": "string",
              "required": true,
              "description": "Market area id, such as sfbay, newyork, losangeles, seattle, chicago, or boston."
            },
            {
              "name": "category",
              "type": "string",
              "required": true,
              "description": "Listing category abbreviation, such as sss, cta, apa, jjj, or zip."
            },
            {
              "name": "query",
              "type": "string",
              "required": true,
              "description": "Search text."
            },
            {
              "name": "sort",
              "type": "string",
              "required": false,
              "description": "Sort filter for Classified Listing Search. Accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\". Constraints: accepted values: \"date\", \"rel\", \"priceasc\", \"pricedsc\"; default: \"date\".",
              "constraints": {
                "enum": [
                  "date",
                  "rel",
                  "priceasc",
                  "pricedsc"
                ],
                "default": "date"
              }
            },
            {
              "name": "postal",
              "type": "string",
              "required": false,
              "description": "Optional postal code to force geo-scoping when the caller's IP region differs from the target city."
            },
            {
              "name": "search_distance",
              "type": "integer",
              "required": false,
              "description": "Optional radius in miles when postal is supplied.",
              "constraints": {
                "minimum": 1,
                "maximum": 500
              }
            },
            {
              "name": "min_price",
              "type": "integer",
              "required": false,
              "description": "Min price numeric value for Classified Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "max_price",
              "type": "integer",
              "required": false,
              "description": "Max price numeric value for Classified Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "min_bedrooms",
              "type": "integer",
              "required": false,
              "description": "Min bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "max_bedrooms",
              "type": "integer",
              "required": false,
              "description": "Max bedrooms numeric value for Classified Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "hasPic",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable has pic behavior for Classified Listing Search."
            },
            {
              "name": "bundleDuplicates",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable bundle duplicates behavior for Classified Listing Search."
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Limit numeric value for Classified Listing Search. Constraints: default: 25; min: 1; max: 100.",
              "constraints": {
                "default": 25,
                "minimum": 1,
                "maximum": 100
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "city": "sfbay",
            "category": "sss",
            "query": "bicycle",
            "sort": "date",
            "postal": "94103",
            "search_distance": 25,
            "limit": 10
          }
        },
        "exampleRequest": {
          "city": "sfbay",
          "category": "sss",
          "query": "bicycle",
          "sort": "date",
          "postal": "94103",
          "search_distance": 25,
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "classified-listing-search",
            "name": "Classified Listing Search",
            "department": "Public Data"
          },
          "total_results": 5635,
          "results": [
            {
              "posting_id": 7927446618,
              "title": "Kryptonite bike chain",
              "price": "$100",
              "location": "san leandro",
              "subarea": "eby"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/california-highway-traffic",
      "type": "http",
      "x402Version": 2,
      "serviceName": "California Highway Traffic Speeds",
      "description": "Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.",
      "longDescription": "Purpose: Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nBest use: Use this when an agent needs return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: region, road, direction, minMph, includeIncidents, includeSensors, limit, proxiesSx.\n\nAccepted fields:\n- region (optional, string): California traffic region. Constraints: accepted values: \"NoCal\", \"SoCal\", \"CenCal\"; default: \"NoCal\".\n- road (optional, string): Optional road/highway filter, such as 101, 580, I-80, or CA-1.\n- direction (optional, string): Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".\n- minMph (optional, integer): Only return sections whose average speed is at or below this MPH. Constraints: min: 0.\n- includeIncidents (optional, boolean): Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true. Constraints: default: true.\n- includeSensors (optional, boolean): Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false. Constraints: default: false.\n- limit (optional, integer): Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200. Constraints: default: 100; min: 1; max: 200.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"region\": \"NoCal\",\n  \"road\": \"580\",\n  \"includeIncidents\": true,\n  \"limit\": 20\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "transportation",
      "aisle": "Transportation",
      "shelfId": "transportation",
      "shelf": "Transportation",
      "offeringId": "california-highway-traffic",
      "offering": "California Highway Traffic Speeds",
      "pathIds": [
        "public-data",
        "transportation",
        "transportation",
        "california-highway-traffic"
      ],
      "pathLabels": [
        "Public Data",
        "Transportation",
        "Transportation",
        "California Highway Traffic Speeds"
      ],
      "taxonomyPath": "public-data.transportation.transportation.california-highway-traffic",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "transportation",
          "name": "Transportation"
        },
        "shelf": {
          "id": "transportation",
          "name": "Transportation"
        },
        "offering": {
          "id": "california-highway-traffic",
          "name": "California Highway Traffic Speeds"
        },
        "pathIds": [
          "public-data",
          "transportation",
          "transportation",
          "california-highway-traffic"
        ],
        "pathLabels": [
          "Public Data",
          "Transportation",
          "Transportation",
          "California Highway Traffic Speeds"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "traffic",
        "california",
        "highways",
        "public-data",
        "transportation"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "region": {
            "type": "string",
            "enum": [
              "NoCal",
              "SoCal",
              "CenCal"
            ],
            "default": "NoCal",
            "description": "California traffic region."
          },
          "road": {
            "type": "string",
            "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
          },
          "direction": {
            "type": "string",
            "enum": [
              "North",
              "South",
              "East",
              "West"
            ],
            "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\"."
          },
          "minMph": {
            "type": "integer",
            "minimum": 0,
            "description": "Only return sections whose average speed is at or below this MPH."
          },
          "includeIncidents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true."
          },
          "includeSensors": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "default": 100,
            "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "region",
          "road",
          "direction",
          "minMph",
          "includeIncidents",
          "includeSensors",
          "limit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "region",
            "type": "string",
            "required": false,
            "description": "California traffic region.",
            "constraints": {
              "enum": [
                "NoCal",
                "SoCal",
                "CenCal"
              ],
              "default": "NoCal"
            }
          },
          {
            "name": "road",
            "type": "string",
            "required": false,
            "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
          },
          {
            "name": "direction",
            "type": "string",
            "required": false,
            "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".",
            "constraints": {
              "enum": [
                "North",
                "South",
                "East",
                "West"
              ]
            }
          },
          {
            "name": "minMph",
            "type": "integer",
            "required": false,
            "description": "Only return sections whose average speed is at or below this MPH.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "includeIncidents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeSensors",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200.",
            "constraints": {
              "default": 100,
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "region": "NoCal",
          "road": "580",
          "includeIncidents": true,
          "limit": 20
        }
      },
      "exampleRequest": {
        "region": "NoCal",
        "road": "580",
        "includeIncidents": true,
        "limit": 20
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "california-highway-traffic",
          "name": "California Highway Traffic Speeds",
          "department": "Public Data"
        },
        "region": "NoCal",
        "results": [
          {
            "road_id": "100580",
            "road": "580",
            "direction": "East",
            "avg_mph": 34.2,
            "min_mph": 12,
            "max_mph": 61,
            "sensors": 18
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "region": "NoCal",
                "road": "580",
                "includeIncidents": true,
                "limit": 20
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "california-highway-traffic",
                  "name": "California Highway Traffic Speeds",
                  "department": "Public Data"
                },
                "region": "NoCal",
                "results": [
                  {
                    "road_id": "100580",
                    "road": "580",
                    "direction": "East",
                    "avg_mph": 34.2,
                    "min_mph": 12,
                    "max_mph": 61,
                    "sensors": 18
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/california-highway-traffic",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "region": {
                        "type": "string",
                        "enum": [
                          "NoCal",
                          "SoCal",
                          "CenCal"
                        ],
                        "default": "NoCal",
                        "description": "California traffic region."
                      },
                      "road": {
                        "type": "string",
                        "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
                      },
                      "direction": {
                        "type": "string",
                        "enum": [
                          "North",
                          "South",
                          "East",
                          "West"
                        ],
                        "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\"."
                      },
                      "minMph": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Only return sections whose average speed is at or below this MPH."
                      },
                      "includeIncidents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true."
                      },
                      "includeSensors": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 200,
                        "default": 100,
                        "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "california-highway-traffic",
            "url": "https://agentbodega.store/api/public-data/california-highway-traffic",
            "method": "POST",
            "description": "Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.",
            "longDescription": "Purpose: Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nBest use: Use this when an agent needs return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: region, road, direction, minMph, includeIncidents, includeSensors, limit, proxiesSx.\n\nAccepted fields:\n- region (optional, string): California traffic region. Constraints: accepted values: \"NoCal\", \"SoCal\", \"CenCal\"; default: \"NoCal\".\n- road (optional, string): Optional road/highway filter, such as 101, 580, I-80, or CA-1.\n- direction (optional, string): Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".\n- minMph (optional, integer): Only return sections whose average speed is at or below this MPH. Constraints: min: 0.\n- includeIncidents (optional, boolean): Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true. Constraints: default: true.\n- includeSensors (optional, boolean): Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false. Constraints: default: false.\n- limit (optional, integer): Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200. Constraints: default: 100; min: 1; max: 200.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"region\": \"NoCal\",\n  \"road\": \"580\",\n  \"includeIncidents\": true,\n  \"limit\": 20\n}\n```",
            "mimeType": "application/json",
            "serviceName": "California Highway Traffic Speeds",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "traffic",
              "california",
              "highways",
              "public-data",
              "transportation"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "region",
                "road",
                "direction",
                "minMph",
                "includeIncidents",
                "includeSensors",
                "limit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "region",
                  "type": "string",
                  "required": false,
                  "description": "California traffic region.",
                  "constraints": {
                    "enum": [
                      "NoCal",
                      "SoCal",
                      "CenCal"
                    ],
                    "default": "NoCal"
                  }
                },
                {
                  "name": "road",
                  "type": "string",
                  "required": false,
                  "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
                },
                {
                  "name": "direction",
                  "type": "string",
                  "required": false,
                  "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".",
                  "constraints": {
                    "enum": [
                      "North",
                      "South",
                      "East",
                      "West"
                    ]
                  }
                },
                {
                  "name": "minMph",
                  "type": "integer",
                  "required": false,
                  "description": "Only return sections whose average speed is at or below this MPH.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "includeIncidents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeSensors",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200.",
                  "constraints": {
                    "default": 100,
                    "minimum": 1,
                    "maximum": 200
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "region": "NoCal",
                "road": "580",
                "includeIncidents": true,
                "limit": 20
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "region": {
                  "type": "string",
                  "enum": [
                    "NoCal",
                    "SoCal",
                    "CenCal"
                  ],
                  "default": "NoCal",
                  "description": "California traffic region."
                },
                "road": {
                  "type": "string",
                  "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
                },
                "direction": {
                  "type": "string",
                  "enum": [
                    "North",
                    "South",
                    "East",
                    "West"
                  ],
                  "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\"."
                },
                "minMph": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Only return sections whose average speed is at or below this MPH."
                },
                "includeIncidents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true."
                },
                "includeSensors": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 200,
                  "default": 100,
                  "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/california-highway-traffic",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/california-highway-traffic",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "transportation",
          "aisle": "Transportation",
          "shelfId": "transportation",
          "shelf": "Transportation",
          "offeringId": "california-highway-traffic",
          "offering": "California Highway Traffic Speeds",
          "pathIds": [
            "public-data",
            "transportation",
            "transportation",
            "california-highway-traffic"
          ],
          "pathLabels": [
            "Public Data",
            "Transportation",
            "Transportation",
            "California Highway Traffic Speeds"
          ],
          "taxonomyPath": "public-data.transportation.transportation.california-highway-traffic",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "transportation",
              "name": "Transportation"
            },
            "shelf": {
              "id": "transportation",
              "name": "Transportation"
            },
            "offering": {
              "id": "california-highway-traffic",
              "name": "California Highway Traffic Speeds"
            },
            "pathIds": [
              "public-data",
              "transportation",
              "transportation",
              "california-highway-traffic"
            ],
            "pathLabels": [
              "Public Data",
              "Transportation",
              "Transportation",
              "California Highway Traffic Speeds"
            ]
          }
        },
        "description": {
          "short": "Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.",
          "full": "Purpose: Return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nBest use: Use this when an agent needs return live California highway speed snapshots grouped by road and direction, with optional incident and sensor detail, without exposing collection endpoints.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: region, road, direction, minMph, includeIncidents, includeSensors, limit, proxiesSx.\n\nAccepted fields:\n- region (optional, string): California traffic region. Constraints: accepted values: \"NoCal\", \"SoCal\", \"CenCal\"; default: \"NoCal\".\n- road (optional, string): Optional road/highway filter, such as 101, 580, I-80, or CA-1.\n- direction (optional, string): Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".\n- minMph (optional, integer): Only return sections whose average speed is at or below this MPH. Constraints: min: 0.\n- includeIncidents (optional, boolean): Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true. Constraints: default: true.\n- includeSensors (optional, boolean): Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false. Constraints: default: false.\n- limit (optional, integer): Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200. Constraints: default: 100; min: 1; max: 200.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"region\": \"NoCal\",\n  \"road\": \"580\",\n  \"includeIncidents\": true,\n  \"limit\": 20\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "region": {
              "type": "string",
              "enum": [
                "NoCal",
                "SoCal",
                "CenCal"
              ],
              "default": "NoCal",
              "description": "California traffic region."
            },
            "road": {
              "type": "string",
              "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
            },
            "direction": {
              "type": "string",
              "enum": [
                "North",
                "South",
                "East",
                "West"
              ],
              "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\"."
            },
            "minMph": {
              "type": "integer",
              "minimum": 0,
              "description": "Only return sections whose average speed is at or below this MPH."
            },
            "includeIncidents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true."
            },
            "includeSensors": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 100,
              "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "region": {
              "type": "string",
              "enum": [
                "NoCal",
                "SoCal",
                "CenCal"
              ],
              "default": "NoCal",
              "description": "California traffic region."
            },
            "road": {
              "type": "string",
              "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
            },
            "direction": {
              "type": "string",
              "enum": [
                "North",
                "South",
                "East",
                "West"
              ],
              "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\"."
            },
            "minMph": {
              "type": "integer",
              "minimum": 0,
              "description": "Only return sections whose average speed is at or below this MPH."
            },
            "includeIncidents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true."
            },
            "includeSensors": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 100,
              "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "region",
            "road",
            "direction",
            "minMph",
            "includeIncidents",
            "includeSensors",
            "limit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "region",
              "type": "string",
              "required": false,
              "description": "California traffic region.",
              "constraints": {
                "enum": [
                  "NoCal",
                  "SoCal",
                  "CenCal"
                ],
                "default": "NoCal"
              }
            },
            {
              "name": "road",
              "type": "string",
              "required": false,
              "description": "Optional road/highway filter, such as 101, 580, I-80, or CA-1."
            },
            {
              "name": "direction",
              "type": "string",
              "required": false,
              "description": "Direction filter for California Highway Traffic Speeds. Accepted values: \"North\", \"South\", \"East\", \"West\". Constraints: accepted values: \"North\", \"South\", \"East\", \"West\".",
              "constraints": {
                "enum": [
                  "North",
                  "South",
                  "East",
                  "West"
                ]
              }
            },
            {
              "name": "minMph",
              "type": "integer",
              "required": false,
              "description": "Only return sections whose average speed is at or below this MPH.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "includeIncidents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include incidents behavior for California Highway Traffic Speeds. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeSensors",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include sensors behavior for California Highway Traffic Speeds. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Limit numeric value for California Highway Traffic Speeds. Constraints: default: 100; min: 1; max: 200.",
              "constraints": {
                "default": 100,
                "minimum": 1,
                "maximum": 200
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "region": "NoCal",
            "road": "580",
            "includeIncidents": true,
            "limit": 20
          }
        },
        "exampleRequest": {
          "region": "NoCal",
          "road": "580",
          "includeIncidents": true,
          "limit": 20
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "california-highway-traffic",
            "name": "California Highway Traffic Speeds",
            "department": "Public Data"
          },
          "region": "NoCal",
          "results": [
            {
              "road_id": "100580",
              "road": "580",
              "direction": "East",
              "avg_mph": 34.2,
              "min_mph": 12,
              "max_mph": 61,
              "sensors": 18
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/rental-listing-search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Rental Listing Search",
      "description": "Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.",
      "longDescription": "Purpose: Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nBest use: Use this when an agent needs find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resourceId.\nOptional fields: searchSlug, maxPrice, minPrice, bedrooms, bathrooms, orderBy, limit, proxiesSx.\n\nAccepted fields:\n- resourceId (required, string): Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca.\n- searchSlug (optional, string): Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent. Constraints: default: \"apartments-for-rent\".\n- maxPrice (optional, integer): Max Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- minPrice (optional, integer): Min Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- bedrooms (optional, string): Comma-separated bedroom filter, such as 1,2,3.\n- bathrooms (optional, string): Comma-separated bathroom filter, such as 1,1.5,2.\n- orderBy (optional, string): Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".\n- limit (optional, integer): Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resourceId\": \"san-francisco-ca\",\n  \"searchSlug\": \"apartments-for-rent\",\n  \"maxPrice\": 4000,\n  \"bedrooms\": \"1,2\",\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "real-estate-rentals",
      "aisle": "Real Estate Rentals",
      "shelfId": "real-estate-rentals",
      "shelf": "Real Estate Rentals",
      "offeringId": "rental-listing-search",
      "offering": "Rental Listing Search",
      "pathIds": [
        "public-data",
        "real-estate-rentals",
        "real-estate-rentals",
        "rental-listing-search"
      ],
      "pathLabels": [
        "Public Data",
        "Real Estate Rentals",
        "Real Estate Rentals",
        "Rental Listing Search"
      ],
      "taxonomyPath": "public-data.real-estate-rentals.real-estate-rentals.rental-listing-search",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "real-estate-rentals",
          "name": "Real Estate Rentals"
        },
        "shelf": {
          "id": "real-estate-rentals",
          "name": "Real Estate Rentals"
        },
        "offering": {
          "id": "rental-listing-search",
          "name": "Rental Listing Search"
        },
        "pathIds": [
          "public-data",
          "real-estate-rentals",
          "real-estate-rentals",
          "rental-listing-search"
        ],
        "pathLabels": [
          "Public Data",
          "Real Estate Rentals",
          "Real Estate Rentals",
          "Rental Listing Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "rentals",
        "real-estate-rentals",
        "apartments",
        "housing",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "resourceId"
        ],
        "properties": {
          "resourceId": {
            "type": "string",
            "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
          },
          "searchSlug": {
            "type": "string",
            "default": "apartments-for-rent",
            "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent."
          },
          "maxPrice": {
            "type": "integer",
            "minimum": 0,
            "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0."
          },
          "minPrice": {
            "type": "integer",
            "minimum": 0,
            "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0."
          },
          "bedrooms": {
            "type": "string",
            "description": "Comma-separated bedroom filter, such as 1,2,3."
          },
          "bathrooms": {
            "type": "string",
            "description": "Comma-separated bathroom filter, such as 1,1.5,2."
          },
          "orderBy": {
            "type": "string",
            "enum": [
              "score",
              "recencyTime",
              "price"
            ],
            "default": "score",
            "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\"."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 25,
            "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "resourceId"
        ],
        "optional": [
          "searchSlug",
          "maxPrice",
          "minPrice",
          "bedrooms",
          "bathrooms",
          "orderBy",
          "limit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "resourceId",
            "type": "string",
            "required": true,
            "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
          },
          {
            "name": "searchSlug",
            "type": "string",
            "required": false,
            "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent.",
            "constraints": {
              "default": "apartments-for-rent"
            }
          },
          {
            "name": "maxPrice",
            "type": "integer",
            "required": false,
            "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "minPrice",
            "type": "integer",
            "required": false,
            "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "bedrooms",
            "type": "string",
            "required": false,
            "description": "Comma-separated bedroom filter, such as 1,2,3."
          },
          {
            "name": "bathrooms",
            "type": "string",
            "required": false,
            "description": "Comma-separated bathroom filter, such as 1,1.5,2."
          },
          {
            "name": "orderBy",
            "type": "string",
            "required": false,
            "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".",
            "constraints": {
              "enum": [
                "score",
                "recencyTime",
                "price"
              ],
              "default": "score"
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100.",
            "constraints": {
              "default": 25,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "resourceId": "san-francisco-ca",
          "searchSlug": "apartments-for-rent",
          "maxPrice": 4000,
          "bedrooms": "1,2",
          "limit": 10
        }
      },
      "exampleRequest": {
        "resourceId": "san-francisco-ca",
        "searchSlug": "apartments-for-rent",
        "maxPrice": 4000,
        "bedrooms": "1,2",
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "rental-listing-search",
          "name": "Rental Listing Search",
          "department": "Public Data"
        },
        "query": {
          "resource_id": "san-francisco-ca",
          "area_name": "San Francisco",
          "search_slug": "apartments-for-rent"
        },
        "results": [
          {
            "title": "NEMA",
            "street": "8 10th St",
            "city": "San Francisco",
            "state": "CA",
            "rent_min": 3750,
            "rent_max": 7925
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "resourceId": "san-francisco-ca",
                "searchSlug": "apartments-for-rent",
                "maxPrice": 4000,
                "bedrooms": "1,2",
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "rental-listing-search",
                  "name": "Rental Listing Search",
                  "department": "Public Data"
                },
                "query": {
                  "resource_id": "san-francisco-ca",
                  "area_name": "San Francisco",
                  "search_slug": "apartments-for-rent"
                },
                "results": [
                  {
                    "title": "NEMA",
                    "street": "8 10th St",
                    "city": "San Francisco",
                    "state": "CA",
                    "rent_min": 3750,
                    "rent_max": 7925
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/rental-listing-search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "resourceId"
                    ],
                    "properties": {
                      "resourceId": {
                        "type": "string",
                        "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
                      },
                      "searchSlug": {
                        "type": "string",
                        "default": "apartments-for-rent",
                        "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent."
                      },
                      "maxPrice": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0."
                      },
                      "minPrice": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0."
                      },
                      "bedrooms": {
                        "type": "string",
                        "description": "Comma-separated bedroom filter, such as 1,2,3."
                      },
                      "bathrooms": {
                        "type": "string",
                        "description": "Comma-separated bathroom filter, such as 1,1.5,2."
                      },
                      "orderBy": {
                        "type": "string",
                        "enum": [
                          "score",
                          "recencyTime",
                          "price"
                        ],
                        "default": "score",
                        "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\"."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100,
                        "default": 25,
                        "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "rental-listing-search",
            "url": "https://agentbodega.store/api/public-data/rental-listing-search",
            "method": "POST",
            "description": "Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.",
            "longDescription": "Purpose: Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nBest use: Use this when an agent needs find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resourceId.\nOptional fields: searchSlug, maxPrice, minPrice, bedrooms, bathrooms, orderBy, limit, proxiesSx.\n\nAccepted fields:\n- resourceId (required, string): Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca.\n- searchSlug (optional, string): Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent. Constraints: default: \"apartments-for-rent\".\n- maxPrice (optional, integer): Max Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- minPrice (optional, integer): Min Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- bedrooms (optional, string): Comma-separated bedroom filter, such as 1,2,3.\n- bathrooms (optional, string): Comma-separated bathroom filter, such as 1,1.5,2.\n- orderBy (optional, string): Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".\n- limit (optional, integer): Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resourceId\": \"san-francisco-ca\",\n  \"searchSlug\": \"apartments-for-rent\",\n  \"maxPrice\": 4000,\n  \"bedrooms\": \"1,2\",\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Rental Listing Search",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "rentals",
              "real-estate-rentals",
              "apartments",
              "housing",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "resourceId"
              ],
              "optional": [
                "searchSlug",
                "maxPrice",
                "minPrice",
                "bedrooms",
                "bathrooms",
                "orderBy",
                "limit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "resourceId",
                  "type": "string",
                  "required": true,
                  "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
                },
                {
                  "name": "searchSlug",
                  "type": "string",
                  "required": false,
                  "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent.",
                  "constraints": {
                    "default": "apartments-for-rent"
                  }
                },
                {
                  "name": "maxPrice",
                  "type": "integer",
                  "required": false,
                  "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "minPrice",
                  "type": "integer",
                  "required": false,
                  "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "bedrooms",
                  "type": "string",
                  "required": false,
                  "description": "Comma-separated bedroom filter, such as 1,2,3."
                },
                {
                  "name": "bathrooms",
                  "type": "string",
                  "required": false,
                  "description": "Comma-separated bathroom filter, such as 1,1.5,2."
                },
                {
                  "name": "orderBy",
                  "type": "string",
                  "required": false,
                  "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".",
                  "constraints": {
                    "enum": [
                      "score",
                      "recencyTime",
                      "price"
                    ],
                    "default": "score"
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100.",
                  "constraints": {
                    "default": 25,
                    "minimum": 1,
                    "maximum": 100
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "resourceId": "san-francisco-ca",
                "searchSlug": "apartments-for-rent",
                "maxPrice": 4000,
                "bedrooms": "1,2",
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "resourceId"
              ],
              "properties": {
                "resourceId": {
                  "type": "string",
                  "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
                },
                "searchSlug": {
                  "type": "string",
                  "default": "apartments-for-rent",
                  "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent."
                },
                "maxPrice": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0."
                },
                "minPrice": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0."
                },
                "bedrooms": {
                  "type": "string",
                  "description": "Comma-separated bedroom filter, such as 1,2,3."
                },
                "bathrooms": {
                  "type": "string",
                  "description": "Comma-separated bathroom filter, such as 1,1.5,2."
                },
                "orderBy": {
                  "type": "string",
                  "enum": [
                    "score",
                    "recencyTime",
                    "price"
                  ],
                  "default": "score",
                  "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\"."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100,
                  "default": 25,
                  "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/rental-listing-search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/rental-listing-search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "real-estate-rentals",
          "aisle": "Real Estate Rentals",
          "shelfId": "real-estate-rentals",
          "shelf": "Real Estate Rentals",
          "offeringId": "rental-listing-search",
          "offering": "Rental Listing Search",
          "pathIds": [
            "public-data",
            "real-estate-rentals",
            "real-estate-rentals",
            "rental-listing-search"
          ],
          "pathLabels": [
            "Public Data",
            "Real Estate Rentals",
            "Real Estate Rentals",
            "Rental Listing Search"
          ],
          "taxonomyPath": "public-data.real-estate-rentals.real-estate-rentals.rental-listing-search",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "real-estate-rentals",
              "name": "Real Estate Rentals"
            },
            "shelf": {
              "id": "real-estate-rentals",
              "name": "Real Estate Rentals"
            },
            "offering": {
              "id": "rental-listing-search",
              "name": "Rental Listing Search"
            },
            "pathIds": [
              "public-data",
              "real-estate-rentals",
              "real-estate-rentals",
              "rental-listing-search"
            ],
            "pathLabels": [
              "Public Data",
              "Real Estate Rentals",
              "Real Estate Rentals",
              "Rental Listing Search"
            ]
          }
        },
        "description": {
          "short": "Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.",
          "full": "Purpose: Find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nBest use: Use this when an agent needs find public rental listings by market resource id, rental category, price, bedrooms, bathrooms, and result limit; returns normalized rental/building records without collection links.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: resourceId.\nOptional fields: searchSlug, maxPrice, minPrice, bedrooms, bathrooms, orderBy, limit, proxiesSx.\n\nAccepted fields:\n- resourceId (required, string): Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca.\n- searchSlug (optional, string): Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent. Constraints: default: \"apartments-for-rent\".\n- maxPrice (optional, integer): Max Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- minPrice (optional, integer): Min Price numeric value for Rental Listing Search. Constraints: min: 0. Constraints: min: 0.\n- bedrooms (optional, string): Comma-separated bedroom filter, such as 1,2,3.\n- bathrooms (optional, string): Comma-separated bathroom filter, such as 1,1.5,2.\n- orderBy (optional, string): Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".\n- limit (optional, integer): Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100. Constraints: default: 25; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"resourceId\": \"san-francisco-ca\",\n  \"searchSlug\": \"apartments-for-rent\",\n  \"maxPrice\": 4000,\n  \"bedrooms\": \"1,2\",\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "resourceId"
          ],
          "properties": {
            "resourceId": {
              "type": "string",
              "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
            },
            "searchSlug": {
              "type": "string",
              "default": "apartments-for-rent",
              "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent."
            },
            "maxPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0."
            },
            "minPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0."
            },
            "bedrooms": {
              "type": "string",
              "description": "Comma-separated bedroom filter, such as 1,2,3."
            },
            "bathrooms": {
              "type": "string",
              "description": "Comma-separated bathroom filter, such as 1,1.5,2."
            },
            "orderBy": {
              "type": "string",
              "enum": [
                "score",
                "recencyTime",
                "price"
              ],
              "default": "score",
              "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\"."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "resourceId"
          ],
          "properties": {
            "resourceId": {
              "type": "string",
              "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
            },
            "searchSlug": {
              "type": "string",
              "default": "apartments-for-rent",
              "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent."
            },
            "maxPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0."
            },
            "minPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0."
            },
            "bedrooms": {
              "type": "string",
              "description": "Comma-separated bedroom filter, such as 1,2,3."
            },
            "bathrooms": {
              "type": "string",
              "description": "Comma-separated bathroom filter, such as 1,1.5,2."
            },
            "orderBy": {
              "type": "string",
              "enum": [
                "score",
                "recencyTime",
                "price"
              ],
              "default": "score",
              "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\"."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "resourceId"
          ],
          "optional": [
            "searchSlug",
            "maxPrice",
            "minPrice",
            "bedrooms",
            "bathrooms",
            "orderBy",
            "limit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "resourceId",
              "type": "string",
              "required": true,
              "description": "Market resource slug or id, such as san-francisco-ca, new-york-ny, brooklyn-new-york-ny, or 94110-ca."
            },
            {
              "name": "searchSlug",
              "type": "string",
              "required": false,
              "description": "Rental search slug, such as apartments-for-rent, houses-for-rent, condos-for-rent, townhomes-for-rent, or rooms-for-rent.",
              "constraints": {
                "default": "apartments-for-rent"
              }
            },
            {
              "name": "maxPrice",
              "type": "integer",
              "required": false,
              "description": "Max Price numeric value for Rental Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "minPrice",
              "type": "integer",
              "required": false,
              "description": "Min Price numeric value for Rental Listing Search. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "bedrooms",
              "type": "string",
              "required": false,
              "description": "Comma-separated bedroom filter, such as 1,2,3."
            },
            {
              "name": "bathrooms",
              "type": "string",
              "required": false,
              "description": "Comma-separated bathroom filter, such as 1,1.5,2."
            },
            {
              "name": "orderBy",
              "type": "string",
              "required": false,
              "description": "Order By filter for Rental Listing Search. Accepted values: \"score\", \"recencyTime\", \"price\". Constraints: accepted values: \"score\", \"recencyTime\", \"price\"; default: \"score\".",
              "constraints": {
                "enum": [
                  "score",
                  "recencyTime",
                  "price"
                ],
                "default": "score"
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Limit numeric value for Rental Listing Search. Constraints: default: 25; min: 1; max: 100.",
              "constraints": {
                "default": 25,
                "minimum": 1,
                "maximum": 100
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "resourceId": "san-francisco-ca",
            "searchSlug": "apartments-for-rent",
            "maxPrice": 4000,
            "bedrooms": "1,2",
            "limit": 10
          }
        },
        "exampleRequest": {
          "resourceId": "san-francisco-ca",
          "searchSlug": "apartments-for-rent",
          "maxPrice": 4000,
          "bedrooms": "1,2",
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "rental-listing-search",
            "name": "Rental Listing Search",
            "department": "Public Data"
          },
          "query": {
            "resource_id": "san-francisco-ca",
            "area_name": "San Francisco",
            "search_slug": "apartments-for-rent"
          },
          "results": [
            {
              "title": "NEMA",
              "street": "8 10th St",
              "city": "San Francisco",
              "state": "CA",
              "rent_min": 3750,
              "rent_max": 7925
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/hospital-quality-rating",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Hospital Quality Rating",
      "description": "Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.",
      "longDescription": "Purpose: Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nBest use: Use this when an agent needs look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: ccn, careCompareUrl, hospitalName, city, state, includeMeasures, compareTo, proxiesSx.\n\nAccepted fields:\n- ccn (optional, string): Six-digit facility id.\n- careCompareUrl (optional, string): Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls. Constraints: format: uri.\n- hospitalName (optional, string): Hospital/facility name for lookup.\n- city (optional, string): City value for Hospital Quality Rating.\n- state (optional, string): Two-letter state abbreviation for name lookup.\n- includeMeasures (optional, boolean): Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true. Constraints: default: true.\n- compareTo (optional, array): Optional extra CCNs to fetch side by side. Constraints: max items: 3.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"ccn\": \"240010\",\n  \"includeMeasures\": true\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "healthcare-quality",
      "aisle": "Healthcare Quality",
      "shelfId": "healthcare-quality",
      "shelf": "Healthcare Quality",
      "offeringId": "hospital-quality-rating",
      "offering": "Hospital Quality Rating",
      "pathIds": [
        "public-data",
        "healthcare-quality",
        "healthcare-quality",
        "hospital-quality-rating"
      ],
      "pathLabels": [
        "Public Data",
        "Healthcare Quality",
        "Healthcare Quality",
        "Hospital Quality Rating"
      ],
      "taxonomyPath": "public-data.healthcare-quality.healthcare-quality.hospital-quality-rating",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "healthcare-quality",
          "name": "Healthcare Quality"
        },
        "shelf": {
          "id": "healthcare-quality",
          "name": "Healthcare Quality"
        },
        "offering": {
          "id": "hospital-quality-rating",
          "name": "Hospital Quality Rating"
        },
        "pathIds": [
          "public-data",
          "healthcare-quality",
          "healthcare-quality",
          "hospital-quality-rating"
        ],
        "pathLabels": [
          "Public Data",
          "Healthcare Quality",
          "Healthcare Quality",
          "Hospital Quality Rating"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "hospital",
        "healthcare",
        "ratings",
        "public-records",
        "quality",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "ccn": {
            "type": "string",
            "description": "Six-digit facility id."
          },
          "careCompareUrl": {
            "type": "string",
            "format": "uri",
            "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls."
          },
          "hospitalName": {
            "type": "string",
            "description": "Hospital/facility name for lookup."
          },
          "city": {
            "type": "string",
            "description": "City value for Hospital Quality Rating."
          },
          "state": {
            "type": "string",
            "description": "Two-letter state abbreviation for name lookup."
          },
          "includeMeasures": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true."
          },
          "compareTo": {
            "type": "array",
            "maxItems": 3,
            "items": {
              "type": "string",
              "description": "Compare To item value for Hospital Quality Rating."
            },
            "description": "Optional extra CCNs to fetch side by side."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "ccn",
          "careCompareUrl",
          "hospitalName",
          "city",
          "state",
          "includeMeasures",
          "compareTo",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "ccn",
            "type": "string",
            "required": false,
            "description": "Six-digit facility id."
          },
          {
            "name": "careCompareUrl",
            "type": "string",
            "required": false,
            "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "hospitalName",
            "type": "string",
            "required": false,
            "description": "Hospital/facility name for lookup."
          },
          {
            "name": "city",
            "type": "string",
            "required": false,
            "description": "City value for Hospital Quality Rating."
          },
          {
            "name": "state",
            "type": "string",
            "required": false,
            "description": "Two-letter state abbreviation for name lookup."
          },
          {
            "name": "includeMeasures",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "compareTo",
            "type": "array",
            "required": false,
            "description": "Optional extra CCNs to fetch side by side.",
            "constraints": {
              "maxItems": 3
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "ccn": "240010",
          "includeMeasures": true
        }
      },
      "exampleRequest": {
        "ccn": "240010",
        "includeMeasures": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "hospital-quality-rating",
          "name": "Hospital Quality Rating",
          "department": "Public Data"
        },
        "result": {
          "ccn": "240010",
          "facility_name": "MAYO CLINIC HOSPITAL ROCHESTER",
          "state": "MN",
          "overall_rating": "5",
          "measures": {
            "hcahps": [],
            "complications_and_deaths": []
          }
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "ccn": "240010",
                "includeMeasures": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "hospital-quality-rating",
                  "name": "Hospital Quality Rating",
                  "department": "Public Data"
                },
                "result": {
                  "ccn": "240010",
                  "facility_name": "MAYO CLINIC HOSPITAL ROCHESTER",
                  "state": "MN",
                  "overall_rating": "5",
                  "measures": {
                    "hcahps": [],
                    "complications_and_deaths": []
                  }
                }
              }
            }
          },
          "routeTemplate": "/api/public-data/hospital-quality-rating",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "ccn": {
                        "type": "string",
                        "description": "Six-digit facility id."
                      },
                      "careCompareUrl": {
                        "type": "string",
                        "format": "uri",
                        "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls."
                      },
                      "hospitalName": {
                        "type": "string",
                        "description": "Hospital/facility name for lookup."
                      },
                      "city": {
                        "type": "string",
                        "description": "City value for Hospital Quality Rating."
                      },
                      "state": {
                        "type": "string",
                        "description": "Two-letter state abbreviation for name lookup."
                      },
                      "includeMeasures": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true."
                      },
                      "compareTo": {
                        "type": "array",
                        "maxItems": 3,
                        "items": {
                          "type": "string",
                          "description": "Compare To item value for Hospital Quality Rating."
                        },
                        "description": "Optional extra CCNs to fetch side by side."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "hospital-quality-rating",
            "url": "https://agentbodega.store/api/public-data/hospital-quality-rating",
            "method": "POST",
            "description": "Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.",
            "longDescription": "Purpose: Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nBest use: Use this when an agent needs look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: ccn, careCompareUrl, hospitalName, city, state, includeMeasures, compareTo, proxiesSx.\n\nAccepted fields:\n- ccn (optional, string): Six-digit facility id.\n- careCompareUrl (optional, string): Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls. Constraints: format: uri.\n- hospitalName (optional, string): Hospital/facility name for lookup.\n- city (optional, string): City value for Hospital Quality Rating.\n- state (optional, string): Two-letter state abbreviation for name lookup.\n- includeMeasures (optional, boolean): Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true. Constraints: default: true.\n- compareTo (optional, array): Optional extra CCNs to fetch side by side. Constraints: max items: 3.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"ccn\": \"240010\",\n  \"includeMeasures\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Hospital Quality Rating",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "hospital",
              "healthcare",
              "ratings",
              "public-records",
              "quality",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "ccn",
                "careCompareUrl",
                "hospitalName",
                "city",
                "state",
                "includeMeasures",
                "compareTo",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "ccn",
                  "type": "string",
                  "required": false,
                  "description": "Six-digit facility id."
                },
                {
                  "name": "careCompareUrl",
                  "type": "string",
                  "required": false,
                  "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "hospitalName",
                  "type": "string",
                  "required": false,
                  "description": "Hospital/facility name for lookup."
                },
                {
                  "name": "city",
                  "type": "string",
                  "required": false,
                  "description": "City value for Hospital Quality Rating."
                },
                {
                  "name": "state",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter state abbreviation for name lookup."
                },
                {
                  "name": "includeMeasures",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "compareTo",
                  "type": "array",
                  "required": false,
                  "description": "Optional extra CCNs to fetch side by side.",
                  "constraints": {
                    "maxItems": 3
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "ccn": "240010",
                "includeMeasures": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "ccn": {
                  "type": "string",
                  "description": "Six-digit facility id."
                },
                "careCompareUrl": {
                  "type": "string",
                  "format": "uri",
                  "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls."
                },
                "hospitalName": {
                  "type": "string",
                  "description": "Hospital/facility name for lookup."
                },
                "city": {
                  "type": "string",
                  "description": "City value for Hospital Quality Rating."
                },
                "state": {
                  "type": "string",
                  "description": "Two-letter state abbreviation for name lookup."
                },
                "includeMeasures": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true."
                },
                "compareTo": {
                  "type": "array",
                  "maxItems": 3,
                  "items": {
                    "type": "string",
                    "description": "Compare To item value for Hospital Quality Rating."
                  },
                  "description": "Optional extra CCNs to fetch side by side."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/hospital-quality-rating",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/hospital-quality-rating",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "healthcare-quality",
          "aisle": "Healthcare Quality",
          "shelfId": "healthcare-quality",
          "shelf": "Healthcare Quality",
          "offeringId": "hospital-quality-rating",
          "offering": "Hospital Quality Rating",
          "pathIds": [
            "public-data",
            "healthcare-quality",
            "healthcare-quality",
            "hospital-quality-rating"
          ],
          "pathLabels": [
            "Public Data",
            "Healthcare Quality",
            "Healthcare Quality",
            "Hospital Quality Rating"
          ],
          "taxonomyPath": "public-data.healthcare-quality.healthcare-quality.hospital-quality-rating",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "healthcare-quality",
              "name": "Healthcare Quality"
            },
            "shelf": {
              "id": "healthcare-quality",
              "name": "Healthcare Quality"
            },
            "offering": {
              "id": "hospital-quality-rating",
              "name": "Hospital Quality Rating"
            },
            "pathIds": [
              "public-data",
              "healthcare-quality",
              "healthcare-quality",
              "hospital-quality-rating"
            ],
            "pathLabels": [
              "Public Data",
              "Healthcare Quality",
              "Healthcare Quality",
              "Hospital Quality Rating"
            ]
          }
        },
        "description": {
          "short": "Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.",
          "full": "Purpose: Look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nBest use: Use this when an agent needs look up public hospital quality metadata by facility id or hospital name/state, including overall star rating and selected measure rows.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: ccn, careCompareUrl, hospitalName, city, state, includeMeasures, compareTo, proxiesSx.\n\nAccepted fields:\n- ccn (optional, string): Six-digit facility id.\n- careCompareUrl (optional, string): Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls. Constraints: format: uri.\n- hospitalName (optional, string): Hospital/facility name for lookup.\n- city (optional, string): City value for Hospital Quality Rating.\n- state (optional, string): Two-letter state abbreviation for name lookup.\n- includeMeasures (optional, boolean): Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true. Constraints: default: true.\n- compareTo (optional, array): Optional extra CCNs to fetch side by side. Constraints: max items: 3.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"ccn\": \"240010\",\n  \"includeMeasures\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "ccn": {
              "type": "string",
              "description": "Six-digit facility id."
            },
            "careCompareUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls."
            },
            "hospitalName": {
              "type": "string",
              "description": "Hospital/facility name for lookup."
            },
            "city": {
              "type": "string",
              "description": "City value for Hospital Quality Rating."
            },
            "state": {
              "type": "string",
              "description": "Two-letter state abbreviation for name lookup."
            },
            "includeMeasures": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true."
            },
            "compareTo": {
              "type": "array",
              "maxItems": 3,
              "items": {
                "type": "string",
                "description": "Compare To item value for Hospital Quality Rating."
              },
              "description": "Optional extra CCNs to fetch side by side."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "ccn": {
              "type": "string",
              "description": "Six-digit facility id."
            },
            "careCompareUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls."
            },
            "hospitalName": {
              "type": "string",
              "description": "Hospital/facility name for lookup."
            },
            "city": {
              "type": "string",
              "description": "City value for Hospital Quality Rating."
            },
            "state": {
              "type": "string",
              "description": "Two-letter state abbreviation for name lookup."
            },
            "includeMeasures": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true."
            },
            "compareTo": {
              "type": "array",
              "maxItems": 3,
              "items": {
                "type": "string",
                "description": "Compare To item value for Hospital Quality Rating."
              },
              "description": "Optional extra CCNs to fetch side by side."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "ccn",
            "careCompareUrl",
            "hospitalName",
            "city",
            "state",
            "includeMeasures",
            "compareTo",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "ccn",
              "type": "string",
              "required": false,
              "description": "Six-digit facility id."
            },
            {
              "name": "careCompareUrl",
              "type": "string",
              "required": false,
              "description": "Optional hospital detail URL containing the facility id. Prefer ccn or hospitalName/state for whitelabeled calls.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "hospitalName",
              "type": "string",
              "required": false,
              "description": "Hospital/facility name for lookup."
            },
            {
              "name": "city",
              "type": "string",
              "required": false,
              "description": "City value for Hospital Quality Rating."
            },
            {
              "name": "state",
              "type": "string",
              "required": false,
              "description": "Two-letter state abbreviation for name lookup."
            },
            {
              "name": "includeMeasures",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include measures behavior for Hospital Quality Rating. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "compareTo",
              "type": "array",
              "required": false,
              "description": "Optional extra CCNs to fetch side by side.",
              "constraints": {
                "maxItems": 3
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "ccn": "240010",
            "includeMeasures": true
          }
        },
        "exampleRequest": {
          "ccn": "240010",
          "includeMeasures": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "hospital-quality-rating",
            "name": "Hospital Quality Rating",
            "department": "Public Data"
          },
          "result": {
            "ccn": "240010",
            "facility_name": "MAYO CLINIC HOSPITAL ROCHESTER",
            "state": "MN",
            "overall_rating": "5",
            "measures": {
              "hcahps": [],
              "complications_and_deaths": []
            }
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/school-quality-rating",
      "type": "http",
      "x402Version": 2,
      "serviceName": "School Quality Rating Lookup",
      "description": "Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.",
      "longDescription": "Purpose: Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nBest use: Use this when an agent needs look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: schoolUrl, schoolName, city, state, includeCatchment, proxiesSx.\n\nAccepted fields:\n- schoolUrl (optional, string): Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls. Constraints: format: uri.\n- schoolName (optional, string): School name to resolve.\n- city (optional, string): City value for School Quality Rating Lookup.\n- state (optional, string): State value for School Quality Rating Lookup.\n- includeCatchment (optional, boolean): Include catchment GeoJSON when present. Large polygons are omitted by default. Constraints: default: false.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"schoolName\": \"Sylvia Mendez Elementary\",\n  \"city\": \"Berkeley\",\n  \"state\": \"CA\"\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "education-quality",
      "aisle": "Education Quality",
      "shelfId": "education-quality",
      "shelf": "Education Quality",
      "offeringId": "school-quality-rating",
      "offering": "School Quality Rating Lookup",
      "pathIds": [
        "public-data",
        "education-quality",
        "education-quality",
        "school-quality-rating"
      ],
      "pathLabels": [
        "Public Data",
        "Education Quality",
        "Education Quality",
        "School Quality Rating Lookup"
      ],
      "taxonomyPath": "public-data.education-quality.education-quality.school-quality-rating",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "education-quality",
          "name": "Education Quality"
        },
        "shelf": {
          "id": "education-quality",
          "name": "Education Quality"
        },
        "offering": {
          "id": "school-quality-rating",
          "name": "School Quality Rating Lookup"
        },
        "pathIds": [
          "public-data",
          "education-quality",
          "education-quality",
          "school-quality-rating"
        ],
        "pathLabels": [
          "Public Data",
          "Education Quality",
          "Education Quality",
          "School Quality Rating Lookup"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "schools",
        "ratings",
        "real-estate",
        "education",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "schoolUrl": {
            "type": "string",
            "format": "uri",
            "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls."
          },
          "schoolName": {
            "type": "string",
            "description": "School name to resolve."
          },
          "city": {
            "type": "string",
            "description": "City value for School Quality Rating Lookup."
          },
          "state": {
            "type": "string",
            "description": "State value for School Quality Rating Lookup."
          },
          "includeCatchment": {
            "type": "boolean",
            "default": false,
            "description": "Include catchment GeoJSON when present. Large polygons are omitted by default."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "schoolUrl",
          "schoolName",
          "city",
          "state",
          "includeCatchment",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "schoolUrl",
            "type": "string",
            "required": false,
            "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "schoolName",
            "type": "string",
            "required": false,
            "description": "School name to resolve."
          },
          {
            "name": "city",
            "type": "string",
            "required": false,
            "description": "City value for School Quality Rating Lookup."
          },
          {
            "name": "state",
            "type": "string",
            "required": false,
            "description": "State value for School Quality Rating Lookup."
          },
          {
            "name": "includeCatchment",
            "type": "boolean",
            "required": false,
            "description": "Include catchment GeoJSON when present. Large polygons are omitted by default.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "schoolName": "Sylvia Mendez Elementary",
          "city": "Berkeley",
          "state": "CA"
        }
      },
      "exampleRequest": {
        "schoolName": "Sylvia Mendez Elementary",
        "city": "Berkeley",
        "state": "CA"
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "school-quality-rating",
          "name": "School Quality Rating Lookup",
          "department": "Public Data"
        },
        "result": {
          "name": "Sylvia Mendez Elementary",
          "school_id": "078571861",
          "great_schools_rating": 7,
          "grades_served": "K-5",
          "enrollment": 379,
          "district": {
            "name": "Berkeley Unified School District"
          }
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "schoolName": "Sylvia Mendez Elementary",
                "city": "Berkeley",
                "state": "CA"
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "school-quality-rating",
                  "name": "School Quality Rating Lookup",
                  "department": "Public Data"
                },
                "result": {
                  "name": "Sylvia Mendez Elementary",
                  "school_id": "078571861",
                  "great_schools_rating": 7,
                  "grades_served": "K-5",
                  "enrollment": 379,
                  "district": {
                    "name": "Berkeley Unified School District"
                  }
                }
              }
            }
          },
          "routeTemplate": "/api/public-data/school-quality-rating",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "schoolUrl": {
                        "type": "string",
                        "format": "uri",
                        "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls."
                      },
                      "schoolName": {
                        "type": "string",
                        "description": "School name to resolve."
                      },
                      "city": {
                        "type": "string",
                        "description": "City value for School Quality Rating Lookup."
                      },
                      "state": {
                        "type": "string",
                        "description": "State value for School Quality Rating Lookup."
                      },
                      "includeCatchment": {
                        "type": "boolean",
                        "default": false,
                        "description": "Include catchment GeoJSON when present. Large polygons are omitted by default."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "school-quality-rating",
            "url": "https://agentbodega.store/api/public-data/school-quality-rating",
            "method": "POST",
            "description": "Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.",
            "longDescription": "Purpose: Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nBest use: Use this when an agent needs look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: schoolUrl, schoolName, city, state, includeCatchment, proxiesSx.\n\nAccepted fields:\n- schoolUrl (optional, string): Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls. Constraints: format: uri.\n- schoolName (optional, string): School name to resolve.\n- city (optional, string): City value for School Quality Rating Lookup.\n- state (optional, string): State value for School Quality Rating Lookup.\n- includeCatchment (optional, boolean): Include catchment GeoJSON when present. Large polygons are omitted by default. Constraints: default: false.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"schoolName\": \"Sylvia Mendez Elementary\",\n  \"city\": \"Berkeley\",\n  \"state\": \"CA\"\n}\n```",
            "mimeType": "application/json",
            "serviceName": "School Quality Rating Lookup",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "schools",
              "ratings",
              "real-estate",
              "education",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "schoolUrl",
                "schoolName",
                "city",
                "state",
                "includeCatchment",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "schoolUrl",
                  "type": "string",
                  "required": false,
                  "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "schoolName",
                  "type": "string",
                  "required": false,
                  "description": "School name to resolve."
                },
                {
                  "name": "city",
                  "type": "string",
                  "required": false,
                  "description": "City value for School Quality Rating Lookup."
                },
                {
                  "name": "state",
                  "type": "string",
                  "required": false,
                  "description": "State value for School Quality Rating Lookup."
                },
                {
                  "name": "includeCatchment",
                  "type": "boolean",
                  "required": false,
                  "description": "Include catchment GeoJSON when present. Large polygons are omitted by default.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "schoolName": "Sylvia Mendez Elementary",
                "city": "Berkeley",
                "state": "CA"
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "schoolUrl": {
                  "type": "string",
                  "format": "uri",
                  "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls."
                },
                "schoolName": {
                  "type": "string",
                  "description": "School name to resolve."
                },
                "city": {
                  "type": "string",
                  "description": "City value for School Quality Rating Lookup."
                },
                "state": {
                  "type": "string",
                  "description": "State value for School Quality Rating Lookup."
                },
                "includeCatchment": {
                  "type": "boolean",
                  "default": false,
                  "description": "Include catchment GeoJSON when present. Large polygons are omitted by default."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/school-quality-rating",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/school-quality-rating",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "education-quality",
          "aisle": "Education Quality",
          "shelfId": "education-quality",
          "shelf": "Education Quality",
          "offeringId": "school-quality-rating",
          "offering": "School Quality Rating Lookup",
          "pathIds": [
            "public-data",
            "education-quality",
            "education-quality",
            "school-quality-rating"
          ],
          "pathLabels": [
            "Public Data",
            "Education Quality",
            "Education Quality",
            "School Quality Rating Lookup"
          ],
          "taxonomyPath": "public-data.education-quality.education-quality.school-quality-rating",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "education-quality",
              "name": "Education Quality"
            },
            "shelf": {
              "id": "education-quality",
              "name": "Education Quality"
            },
            "offering": {
              "id": "school-quality-rating",
              "name": "School Quality Rating Lookup"
            },
            "pathIds": [
              "public-data",
              "education-quality",
              "education-quality",
              "school-quality-rating"
            ],
            "pathLabels": [
              "Public Data",
              "Education Quality",
              "Education Quality",
              "School Quality Rating Lookup"
            ]
          }
        },
        "description": {
          "short": "Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.",
          "full": "Purpose: Look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nBest use: Use this when an agent needs look up public school rating data by school name/city/state, returning rating, grades, enrollment, district, address, and ids.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: schoolUrl, schoolName, city, state, includeCatchment, proxiesSx.\n\nAccepted fields:\n- schoolUrl (optional, string): Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls. Constraints: format: uri.\n- schoolName (optional, string): School name to resolve.\n- city (optional, string): City value for School Quality Rating Lookup.\n- state (optional, string): State value for School Quality Rating Lookup.\n- includeCatchment (optional, boolean): Include catchment GeoJSON when present. Large polygons are omitted by default. Constraints: default: false.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"schoolName\": \"Sylvia Mendez Elementary\",\n  \"city\": \"Berkeley\",\n  \"state\": \"CA\"\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "schoolUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls."
            },
            "schoolName": {
              "type": "string",
              "description": "School name to resolve."
            },
            "city": {
              "type": "string",
              "description": "City value for School Quality Rating Lookup."
            },
            "state": {
              "type": "string",
              "description": "State value for School Quality Rating Lookup."
            },
            "includeCatchment": {
              "type": "boolean",
              "default": false,
              "description": "Include catchment GeoJSON when present. Large polygons are omitted by default."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "schoolUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls."
            },
            "schoolName": {
              "type": "string",
              "description": "School name to resolve."
            },
            "city": {
              "type": "string",
              "description": "City value for School Quality Rating Lookup."
            },
            "state": {
              "type": "string",
              "description": "State value for School Quality Rating Lookup."
            },
            "includeCatchment": {
              "type": "boolean",
              "default": false,
              "description": "Include catchment GeoJSON when present. Large polygons are omitted by default."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "schoolUrl",
            "schoolName",
            "city",
            "state",
            "includeCatchment",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "schoolUrl",
              "type": "string",
              "required": false,
              "description": "Optional school detail URL. Prefer schoolName/city/state for whitelabeled calls.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "schoolName",
              "type": "string",
              "required": false,
              "description": "School name to resolve."
            },
            {
              "name": "city",
              "type": "string",
              "required": false,
              "description": "City value for School Quality Rating Lookup."
            },
            {
              "name": "state",
              "type": "string",
              "required": false,
              "description": "State value for School Quality Rating Lookup."
            },
            {
              "name": "includeCatchment",
              "type": "boolean",
              "required": false,
              "description": "Include catchment GeoJSON when present. Large polygons are omitted by default.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "schoolName": "Sylvia Mendez Elementary",
            "city": "Berkeley",
            "state": "CA"
          }
        },
        "exampleRequest": {
          "schoolName": "Sylvia Mendez Elementary",
          "city": "Berkeley",
          "state": "CA"
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "school-quality-rating",
            "name": "School Quality Rating Lookup",
            "department": "Public Data"
          },
          "result": {
            "name": "Sylvia Mendez Elementary",
            "school_id": "078571861",
            "great_schools_rating": 7,
            "grades_served": "K-5",
            "enrollment": 379,
            "district": {
              "name": "Berkeley Unified School District"
            }
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/home-comparable-sales",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Home Comparable Sales",
      "description": "Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.",
      "longDescription": "Purpose: Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nBest use: Use this when an agent needs return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: regionId, regionType, market, lat, lon, radiusMiles, soldWithinDays, minPrice, maxPrice, minBeds, maxBeds, minBaths, maxBaths, limit, proxiesSx.\n\nAccepted fields:\n- regionId (optional, string): Market region id, such as city id or ZIP region id.\n- regionType (optional, integer): Market region type. Common values: 2 for ZIP, 6 for city. Constraints: default: 6.\n- market (optional, string): Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston.\n- lat (optional, number): Subject latitude for a bounded-radius polygon search.\n- lon (optional, number): Subject longitude for a bounded-radius polygon search.\n- radiusMiles (optional, number): Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25. Constraints: default: 1; min: 0.1; max: 25.\n- soldWithinDays (optional, integer): Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.\n- minPrice (optional, integer): Min Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxPrice (optional, integer): Max Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBeds (optional, integer): Min Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBeds (optional, integer): Max Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBaths (optional, number): Min Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBaths (optional, number): Max Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- limit (optional, integer): Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50. Constraints: default: 10; min: 1; max: 50.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"regionId\": \"17151\",\n  \"regionType\": 6,\n  \"market\": \"sanfrancisco\",\n  \"soldWithinDays\": 180,\n  \"minBeds\": 2,\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "real-estate-comps",
      "aisle": "Real Estate Comps",
      "shelfId": "real-estate-comps",
      "shelf": "Real Estate Comps",
      "offeringId": "home-comparable-sales",
      "offering": "Home Comparable Sales",
      "pathIds": [
        "public-data",
        "real-estate-comps",
        "real-estate-comps",
        "home-comparable-sales"
      ],
      "pathLabels": [
        "Public Data",
        "Real Estate Comps",
        "Real Estate Comps",
        "Home Comparable Sales"
      ],
      "taxonomyPath": "public-data.real-estate-comps.real-estate-comps.home-comparable-sales",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "real-estate-comps",
          "name": "Real Estate Comps"
        },
        "shelf": {
          "id": "real-estate-comps",
          "name": "Real Estate Comps"
        },
        "offering": {
          "id": "home-comparable-sales",
          "name": "Home Comparable Sales"
        },
        "pathIds": [
          "public-data",
          "real-estate-comps",
          "real-estate-comps",
          "home-comparable-sales"
        ],
        "pathLabels": [
          "Public Data",
          "Real Estate Comps",
          "Real Estate Comps",
          "Home Comparable Sales"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "comparable-sales",
        "real-estate",
        "sold-comps",
        "valuation",
        "public-data",
        "redfin",
        "redfin-comps"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "30000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "30000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "regionId": {
            "type": "string",
            "description": "Market region id, such as city id or ZIP region id."
          },
          "regionType": {
            "type": "integer",
            "default": 6,
            "description": "Market region type. Common values: 2 for ZIP, 6 for city."
          },
          "market": {
            "type": "string",
            "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
          },
          "lat": {
            "type": "number",
            "description": "Subject latitude for a bounded-radius polygon search."
          },
          "lon": {
            "type": "number",
            "description": "Subject longitude for a bounded-radius polygon search."
          },
          "radiusMiles": {
            "type": "number",
            "minimum": 0.1,
            "maximum": 25,
            "default": 1,
            "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25."
          },
          "soldWithinDays": {
            "type": "integer",
            "enum": [
              30,
              90,
              180,
              365,
              730,
              1095
            ],
            "default": 180,
            "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180."
          },
          "minPrice": {
            "type": "integer",
            "minimum": 0,
            "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "maxPrice": {
            "type": "integer",
            "minimum": 0,
            "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "minBeds": {
            "type": "integer",
            "minimum": 0,
            "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "maxBeds": {
            "type": "integer",
            "minimum": 0,
            "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "minBaths": {
            "type": "number",
            "minimum": 0,
            "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "maxBaths": {
            "type": "number",
            "minimum": 0,
            "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "regionId",
          "regionType",
          "market",
          "lat",
          "lon",
          "radiusMiles",
          "soldWithinDays",
          "minPrice",
          "maxPrice",
          "minBeds",
          "maxBeds",
          "minBaths",
          "maxBaths",
          "limit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "regionId",
            "type": "string",
            "required": false,
            "description": "Market region id, such as city id or ZIP region id."
          },
          {
            "name": "regionType",
            "type": "integer",
            "required": false,
            "description": "Market region type. Common values: 2 for ZIP, 6 for city.",
            "constraints": {
              "default": 6
            }
          },
          {
            "name": "market",
            "type": "string",
            "required": false,
            "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
          },
          {
            "name": "lat",
            "type": "number",
            "required": false,
            "description": "Subject latitude for a bounded-radius polygon search."
          },
          {
            "name": "lon",
            "type": "number",
            "required": false,
            "description": "Subject longitude for a bounded-radius polygon search."
          },
          {
            "name": "radiusMiles",
            "type": "number",
            "required": false,
            "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25.",
            "constraints": {
              "default": 1,
              "minimum": 0.1,
              "maximum": 25
            }
          },
          {
            "name": "soldWithinDays",
            "type": "integer",
            "required": false,
            "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.",
            "constraints": {
              "enum": [
                30,
                90,
                180,
                365,
                730,
                1095
              ],
              "default": 180
            }
          },
          {
            "name": "minPrice",
            "type": "integer",
            "required": false,
            "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "maxPrice",
            "type": "integer",
            "required": false,
            "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "minBeds",
            "type": "integer",
            "required": false,
            "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "maxBeds",
            "type": "integer",
            "required": false,
            "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "minBaths",
            "type": "number",
            "required": false,
            "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "maxBaths",
            "type": "number",
            "required": false,
            "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
            "constraints": {
              "minimum": 0
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50.",
            "constraints": {
              "default": 10,
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "regionId": "17151",
          "regionType": 6,
          "market": "sanfrancisco",
          "soldWithinDays": 180,
          "minBeds": 2,
          "limit": 10
        }
      },
      "exampleRequest": {
        "regionId": "17151",
        "regionType": 6,
        "market": "sanfrancisco",
        "soldWithinDays": 180,
        "minBeds": 2,
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "home-comparable-sales",
          "name": "Home Comparable Sales",
          "department": "Public Data"
        },
        "result": {
          "subject": {
            "region_id": "17151",
            "market": "sanfrancisco"
          },
          "comps": [
            {
              "address": "123 Example St",
              "price": 1275000,
              "beds": 3,
              "baths": 2,
              "sqft": 1420,
              "sold_date": "2026-05-15"
            }
          ]
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "regionId": "17151",
                "regionType": 6,
                "market": "sanfrancisco",
                "soldWithinDays": 180,
                "minBeds": 2,
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "home-comparable-sales",
                  "name": "Home Comparable Sales",
                  "department": "Public Data"
                },
                "result": {
                  "subject": {
                    "region_id": "17151",
                    "market": "sanfrancisco"
                  },
                  "comps": [
                    {
                      "address": "123 Example St",
                      "price": 1275000,
                      "beds": 3,
                      "baths": 2,
                      "sqft": 1420,
                      "sold_date": "2026-05-15"
                    }
                  ]
                }
              }
            }
          },
          "routeTemplate": "/api/public-data/home-comparable-sales",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "regionId": {
                        "type": "string",
                        "description": "Market region id, such as city id or ZIP region id."
                      },
                      "regionType": {
                        "type": "integer",
                        "default": 6,
                        "description": "Market region type. Common values: 2 for ZIP, 6 for city."
                      },
                      "market": {
                        "type": "string",
                        "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
                      },
                      "lat": {
                        "type": "number",
                        "description": "Subject latitude for a bounded-radius polygon search."
                      },
                      "lon": {
                        "type": "number",
                        "description": "Subject longitude for a bounded-radius polygon search."
                      },
                      "radiusMiles": {
                        "type": "number",
                        "minimum": 0.1,
                        "maximum": 25,
                        "default": 1,
                        "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25."
                      },
                      "soldWithinDays": {
                        "type": "integer",
                        "enum": [
                          30,
                          90,
                          180,
                          365,
                          730,
                          1095
                        ],
                        "default": 180,
                        "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180."
                      },
                      "minPrice": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "maxPrice": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "minBeds": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "maxBeds": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "minBaths": {
                        "type": "number",
                        "minimum": 0,
                        "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "maxBaths": {
                        "type": "number",
                        "minimum": 0,
                        "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 50,
                        "default": 10,
                        "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "home-comparable-sales",
            "url": "https://agentbodega.store/api/public-data/home-comparable-sales",
            "method": "POST",
            "description": "Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.",
            "longDescription": "Purpose: Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nBest use: Use this when an agent needs return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: regionId, regionType, market, lat, lon, radiusMiles, soldWithinDays, minPrice, maxPrice, minBeds, maxBeds, minBaths, maxBaths, limit, proxiesSx.\n\nAccepted fields:\n- regionId (optional, string): Market region id, such as city id or ZIP region id.\n- regionType (optional, integer): Market region type. Common values: 2 for ZIP, 6 for city. Constraints: default: 6.\n- market (optional, string): Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston.\n- lat (optional, number): Subject latitude for a bounded-radius polygon search.\n- lon (optional, number): Subject longitude for a bounded-radius polygon search.\n- radiusMiles (optional, number): Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25. Constraints: default: 1; min: 0.1; max: 25.\n- soldWithinDays (optional, integer): Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.\n- minPrice (optional, integer): Min Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxPrice (optional, integer): Max Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBeds (optional, integer): Min Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBeds (optional, integer): Max Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBaths (optional, number): Min Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBaths (optional, number): Max Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- limit (optional, integer): Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50. Constraints: default: 10; min: 1; max: 50.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"regionId\": \"17151\",\n  \"regionType\": 6,\n  \"market\": \"sanfrancisco\",\n  \"soldWithinDays\": 180,\n  \"minBeds\": 2,\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Home Comparable Sales",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "comparable-sales",
              "real-estate",
              "sold-comps",
              "valuation",
              "public-data",
              "redfin",
              "redfin-comps"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "regionId",
                "regionType",
                "market",
                "lat",
                "lon",
                "radiusMiles",
                "soldWithinDays",
                "minPrice",
                "maxPrice",
                "minBeds",
                "maxBeds",
                "minBaths",
                "maxBaths",
                "limit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "regionId",
                  "type": "string",
                  "required": false,
                  "description": "Market region id, such as city id or ZIP region id."
                },
                {
                  "name": "regionType",
                  "type": "integer",
                  "required": false,
                  "description": "Market region type. Common values: 2 for ZIP, 6 for city.",
                  "constraints": {
                    "default": 6
                  }
                },
                {
                  "name": "market",
                  "type": "string",
                  "required": false,
                  "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
                },
                {
                  "name": "lat",
                  "type": "number",
                  "required": false,
                  "description": "Subject latitude for a bounded-radius polygon search."
                },
                {
                  "name": "lon",
                  "type": "number",
                  "required": false,
                  "description": "Subject longitude for a bounded-radius polygon search."
                },
                {
                  "name": "radiusMiles",
                  "type": "number",
                  "required": false,
                  "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25.",
                  "constraints": {
                    "default": 1,
                    "minimum": 0.1,
                    "maximum": 25
                  }
                },
                {
                  "name": "soldWithinDays",
                  "type": "integer",
                  "required": false,
                  "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.",
                  "constraints": {
                    "enum": [
                      30,
                      90,
                      180,
                      365,
                      730,
                      1095
                    ],
                    "default": 180
                  }
                },
                {
                  "name": "minPrice",
                  "type": "integer",
                  "required": false,
                  "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "maxPrice",
                  "type": "integer",
                  "required": false,
                  "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "minBeds",
                  "type": "integer",
                  "required": false,
                  "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "maxBeds",
                  "type": "integer",
                  "required": false,
                  "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "minBaths",
                  "type": "number",
                  "required": false,
                  "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "maxBaths",
                  "type": "number",
                  "required": false,
                  "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
                  "constraints": {
                    "minimum": 0
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50.",
                  "constraints": {
                    "default": 10,
                    "minimum": 1,
                    "maximum": 50
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "regionId": "17151",
                "regionType": 6,
                "market": "sanfrancisco",
                "soldWithinDays": 180,
                "minBeds": 2,
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "regionId": {
                  "type": "string",
                  "description": "Market region id, such as city id or ZIP region id."
                },
                "regionType": {
                  "type": "integer",
                  "default": 6,
                  "description": "Market region type. Common values: 2 for ZIP, 6 for city."
                },
                "market": {
                  "type": "string",
                  "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
                },
                "lat": {
                  "type": "number",
                  "description": "Subject latitude for a bounded-radius polygon search."
                },
                "lon": {
                  "type": "number",
                  "description": "Subject longitude for a bounded-radius polygon search."
                },
                "radiusMiles": {
                  "type": "number",
                  "minimum": 0.1,
                  "maximum": 25,
                  "default": 1,
                  "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25."
                },
                "soldWithinDays": {
                  "type": "integer",
                  "enum": [
                    30,
                    90,
                    180,
                    365,
                    730,
                    1095
                  ],
                  "default": 180,
                  "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180."
                },
                "minPrice": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "maxPrice": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "minBeds": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "maxBeds": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "minBaths": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "maxBaths": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 50,
                  "default": 10,
                  "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.03"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.03",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/home-comparable-sales",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.03"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/home-comparable-sales",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "real-estate-comps",
          "aisle": "Real Estate Comps",
          "shelfId": "real-estate-comps",
          "shelf": "Real Estate Comps",
          "offeringId": "home-comparable-sales",
          "offering": "Home Comparable Sales",
          "pathIds": [
            "public-data",
            "real-estate-comps",
            "real-estate-comps",
            "home-comparable-sales"
          ],
          "pathLabels": [
            "Public Data",
            "Real Estate Comps",
            "Real Estate Comps",
            "Home Comparable Sales"
          ],
          "taxonomyPath": "public-data.real-estate-comps.real-estate-comps.home-comparable-sales",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "real-estate-comps",
              "name": "Real Estate Comps"
            },
            "shelf": {
              "id": "real-estate-comps",
              "name": "Real Estate Comps"
            },
            "offering": {
              "id": "home-comparable-sales",
              "name": "Home Comparable Sales"
            },
            "pathIds": [
              "public-data",
              "real-estate-comps",
              "real-estate-comps",
              "home-comparable-sales"
            ],
            "pathLabels": [
              "Public Data",
              "Real Estate Comps",
              "Real Estate Comps",
              "Home Comparable Sales"
            ]
          }
        },
        "description": {
          "short": "Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.",
          "full": "Purpose: Return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nBest use: Use this when an agent needs return best-effort recent sold comparable sales for a region or lat/lon search, with normalized property attributes and no source links.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: regionId, regionType, market, lat, lon, radiusMiles, soldWithinDays, minPrice, maxPrice, minBeds, maxBeds, minBaths, maxBaths, limit, proxiesSx.\n\nAccepted fields:\n- regionId (optional, string): Market region id, such as city id or ZIP region id.\n- regionType (optional, integer): Market region type. Common values: 2 for ZIP, 6 for city. Constraints: default: 6.\n- market (optional, string): Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston.\n- lat (optional, number): Subject latitude for a bounded-radius polygon search.\n- lon (optional, number): Subject longitude for a bounded-radius polygon search.\n- radiusMiles (optional, number): Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25. Constraints: default: 1; min: 0.1; max: 25.\n- soldWithinDays (optional, integer): Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.\n- minPrice (optional, integer): Min Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxPrice (optional, integer): Max Price numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBeds (optional, integer): Min Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBeds (optional, integer): Max Beds numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- minBaths (optional, number): Min Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- maxBaths (optional, number): Max Baths numeric value for Home Comparable Sales. Constraints: min: 0. Constraints: min: 0.\n- limit (optional, integer): Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50. Constraints: default: 10; min: 1; max: 50.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"regionId\": \"17151\",\n  \"regionType\": 6,\n  \"market\": \"sanfrancisco\",\n  \"soldWithinDays\": 180,\n  \"minBeds\": 2,\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "regionId": {
              "type": "string",
              "description": "Market region id, such as city id or ZIP region id."
            },
            "regionType": {
              "type": "integer",
              "default": 6,
              "description": "Market region type. Common values: 2 for ZIP, 6 for city."
            },
            "market": {
              "type": "string",
              "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
            },
            "lat": {
              "type": "number",
              "description": "Subject latitude for a bounded-radius polygon search."
            },
            "lon": {
              "type": "number",
              "description": "Subject longitude for a bounded-radius polygon search."
            },
            "radiusMiles": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 25,
              "default": 1,
              "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25."
            },
            "soldWithinDays": {
              "type": "integer",
              "enum": [
                30,
                90,
                180,
                365,
                730,
                1095
              ],
              "default": 180,
              "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180."
            },
            "minPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "minBeds": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxBeds": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "minBaths": {
              "type": "number",
              "minimum": 0,
              "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxBaths": {
              "type": "number",
              "minimum": 0,
              "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10,
              "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "regionId": {
              "type": "string",
              "description": "Market region id, such as city id or ZIP region id."
            },
            "regionType": {
              "type": "integer",
              "default": 6,
              "description": "Market region type. Common values: 2 for ZIP, 6 for city."
            },
            "market": {
              "type": "string",
              "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
            },
            "lat": {
              "type": "number",
              "description": "Subject latitude for a bounded-radius polygon search."
            },
            "lon": {
              "type": "number",
              "description": "Subject longitude for a bounded-radius polygon search."
            },
            "radiusMiles": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 25,
              "default": 1,
              "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25."
            },
            "soldWithinDays": {
              "type": "integer",
              "enum": [
                30,
                90,
                180,
                365,
                730,
                1095
              ],
              "default": 180,
              "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180."
            },
            "minPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxPrice": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "minBeds": {
              "type": "integer",
              "minimum": 0,
              "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxBeds": {
              "type": "integer",
              "minimum": 0,
              "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "minBaths": {
              "type": "number",
              "minimum": 0,
              "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "maxBaths": {
              "type": "number",
              "minimum": 0,
              "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10,
              "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "regionId",
            "regionType",
            "market",
            "lat",
            "lon",
            "radiusMiles",
            "soldWithinDays",
            "minPrice",
            "maxPrice",
            "minBeds",
            "maxBeds",
            "minBaths",
            "maxBaths",
            "limit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "regionId",
              "type": "string",
              "required": false,
              "description": "Market region id, such as city id or ZIP region id."
            },
            {
              "name": "regionType",
              "type": "integer",
              "required": false,
              "description": "Market region type. Common values: 2 for ZIP, 6 for city.",
              "constraints": {
                "default": 6
              }
            },
            {
              "name": "market",
              "type": "string",
              "required": false,
              "description": "Market slug, such as sanfrancisco, losangeles, seattle, chicago, newyork, or boston."
            },
            {
              "name": "lat",
              "type": "number",
              "required": false,
              "description": "Subject latitude for a bounded-radius polygon search."
            },
            {
              "name": "lon",
              "type": "number",
              "required": false,
              "description": "Subject longitude for a bounded-radius polygon search."
            },
            {
              "name": "radiusMiles",
              "type": "number",
              "required": false,
              "description": "Radius Miles numeric value for Home Comparable Sales. Constraints: default: 1; min: 0.1; max: 25.",
              "constraints": {
                "default": 1,
                "minimum": 0.1,
                "maximum": 25
              }
            },
            {
              "name": "soldWithinDays",
              "type": "integer",
              "required": false,
              "description": "Sold Within Days filter for Home Comparable Sales. Accepted values: 30, 90, 180, 365, 730, 1095. Constraints: accepted values: 30, 90, 180, 365, 730, 1095; default: 180.",
              "constraints": {
                "enum": [
                  30,
                  90,
                  180,
                  365,
                  730,
                  1095
                ],
                "default": 180
              }
            },
            {
              "name": "minPrice",
              "type": "integer",
              "required": false,
              "description": "Min Price numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "maxPrice",
              "type": "integer",
              "required": false,
              "description": "Max Price numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "minBeds",
              "type": "integer",
              "required": false,
              "description": "Min Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "maxBeds",
              "type": "integer",
              "required": false,
              "description": "Max Beds numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "minBaths",
              "type": "number",
              "required": false,
              "description": "Min Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "maxBaths",
              "type": "number",
              "required": false,
              "description": "Max Baths numeric value for Home Comparable Sales. Constraints: min: 0.",
              "constraints": {
                "minimum": 0
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Limit numeric value for Home Comparable Sales. Constraints: default: 10; min: 1; max: 50.",
              "constraints": {
                "default": 10,
                "minimum": 1,
                "maximum": 50
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "regionId": "17151",
            "regionType": 6,
            "market": "sanfrancisco",
            "soldWithinDays": 180,
            "minBeds": 2,
            "limit": 10
          }
        },
        "exampleRequest": {
          "regionId": "17151",
          "regionType": 6,
          "market": "sanfrancisco",
          "soldWithinDays": 180,
          "minBeds": 2,
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "home-comparable-sales",
            "name": "Home Comparable Sales",
            "department": "Public Data"
          },
          "result": {
            "subject": {
              "region_id": "17151",
              "market": "sanfrancisco"
            },
            "comps": [
              {
                "address": "123 Example St",
                "price": 1275000,
                "beds": 3,
                "baths": 2,
                "sqft": 1420,
                "sold_date": "2026-05-15"
              }
            ]
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/volunteer-opportunity-search",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Volunteer Opportunity Search",
      "description": "Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.",
      "longDescription": "Purpose: Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nBest use: Use this when an agent needs search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, opportunityUrl, lat, lon, radiusMiles, remote, categories, page, limit, proxiesSx.\n\nAccepted fields:\n- query (optional, string): Search text.\n- opportunityUrl (optional, string): Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls. Constraints: format: uri.\n- lat (optional, number): Lat numeric value for Volunteer Opportunity Search.\n- lon (optional, number): Lon numeric value for Volunteer Opportunity Search.\n- radiusMiles (optional, number): Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250. Constraints: default: 25; min: 1; max: 250.\n- remote (optional, boolean): Filter for remote/virtual opportunities.\n- categories (optional, array): Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT. Constraints: max items: 8.\n- page (optional, integer): Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100. Constraints: default: 0; min: 0; max: 100.\n- limit (optional, integer): Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100. Constraints: default: 20; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"query\": \"food bank\",\n  \"lat\": 40.7128,\n  \"lon\": -74.006,\n  \"radiusMiles\": 25,\n  \"categories\": [\n    \"HUNGER_FOOD_SECURITY\"\n  ],\n  \"limit\": 10\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "civic-opportunities",
      "aisle": "Civic Opportunities",
      "shelfId": "civic-opportunities",
      "shelf": "Civic Opportunities",
      "offeringId": "volunteer-opportunity-search",
      "offering": "Volunteer Opportunity Search",
      "pathIds": [
        "public-data",
        "civic-opportunities",
        "civic-opportunities",
        "volunteer-opportunity-search"
      ],
      "pathLabels": [
        "Public Data",
        "Civic Opportunities",
        "Civic Opportunities",
        "Volunteer Opportunity Search"
      ],
      "taxonomyPath": "public-data.civic-opportunities.civic-opportunities.volunteer-opportunity-search",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "civic-opportunities",
          "name": "Civic Opportunities"
        },
        "shelf": {
          "id": "civic-opportunities",
          "name": "Civic Opportunities"
        },
        "offering": {
          "id": "volunteer-opportunity-search",
          "name": "Volunteer Opportunity Search"
        },
        "pathIds": [
          "public-data",
          "civic-opportunities",
          "civic-opportunities",
          "volunteer-opportunity-search"
        ],
        "pathLabels": [
          "Public Data",
          "Civic Opportunities",
          "Civic Opportunities",
          "Volunteer Opportunity Search"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "volunteering",
        "opportunities",
        "civic",
        "nonprofit",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Search text."
          },
          "opportunityUrl": {
            "type": "string",
            "format": "uri",
            "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls."
          },
          "lat": {
            "type": "number",
            "description": "Lat numeric value for Volunteer Opportunity Search."
          },
          "lon": {
            "type": "number",
            "description": "Lon numeric value for Volunteer Opportunity Search."
          },
          "radiusMiles": {
            "type": "number",
            "minimum": 1,
            "maximum": 250,
            "default": 25,
            "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250."
          },
          "remote": {
            "type": "boolean",
            "description": "Filter for remote/virtual opportunities."
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Categories item value for Volunteer Opportunity Search."
            },
            "maxItems": 8,
            "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT."
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "default": 0,
            "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "query",
          "opportunityUrl",
          "lat",
          "lon",
          "radiusMiles",
          "remote",
          "categories",
          "page",
          "limit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "query",
            "type": "string",
            "required": false,
            "description": "Search text."
          },
          {
            "name": "opportunityUrl",
            "type": "string",
            "required": false,
            "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "lat",
            "type": "number",
            "required": false,
            "description": "Lat numeric value for Volunteer Opportunity Search."
          },
          {
            "name": "lon",
            "type": "number",
            "required": false,
            "description": "Lon numeric value for Volunteer Opportunity Search."
          },
          {
            "name": "radiusMiles",
            "type": "number",
            "required": false,
            "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250.",
            "constraints": {
              "default": 25,
              "minimum": 1,
              "maximum": 250
            }
          },
          {
            "name": "remote",
            "type": "boolean",
            "required": false,
            "description": "Filter for remote/virtual opportunities."
          },
          {
            "name": "categories",
            "type": "array",
            "required": false,
            "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT.",
            "constraints": {
              "maxItems": 8
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "type": "integer",
            "required": false,
            "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100.",
            "constraints": {
              "default": 0,
              "minimum": 0,
              "maximum": 100
            }
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100.",
            "constraints": {
              "default": 20,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "query": "food bank",
          "lat": 40.7128,
          "lon": -74.006,
          "radiusMiles": 25,
          "categories": [
            "HUNGER_FOOD_SECURITY"
          ],
          "limit": 10
        }
      },
      "exampleRequest": {
        "query": "food bank",
        "lat": 40.7128,
        "lon": -74.006,
        "radiusMiles": 25,
        "categories": [
          "HUNGER_FOOD_SECURITY"
        ],
        "limit": 10
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "volunteer-opportunity-search",
          "name": "Volunteer Opportunity Search",
          "department": "Public Data"
        },
        "total": 128,
        "results": [
          {
            "id": "abc123",
            "title": "Pack meals for neighbors",
            "organization": "Example Food Bank",
            "location": {
              "city": "New York",
              "state": "NY"
            },
            "remote": false
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "query": "food bank",
                "lat": 40.7128,
                "lon": -74.006,
                "radiusMiles": 25,
                "categories": [
                  "HUNGER_FOOD_SECURITY"
                ],
                "limit": 10
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "volunteer-opportunity-search",
                  "name": "Volunteer Opportunity Search",
                  "department": "Public Data"
                },
                "total": 128,
                "results": [
                  {
                    "id": "abc123",
                    "title": "Pack meals for neighbors",
                    "organization": "Example Food Bank",
                    "location": {
                      "city": "New York",
                      "state": "NY"
                    },
                    "remote": false
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/public-data/volunteer-opportunity-search",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "description": "Search text."
                      },
                      "opportunityUrl": {
                        "type": "string",
                        "format": "uri",
                        "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls."
                      },
                      "lat": {
                        "type": "number",
                        "description": "Lat numeric value for Volunteer Opportunity Search."
                      },
                      "lon": {
                        "type": "number",
                        "description": "Lon numeric value for Volunteer Opportunity Search."
                      },
                      "radiusMiles": {
                        "type": "number",
                        "minimum": 1,
                        "maximum": 250,
                        "default": 25,
                        "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250."
                      },
                      "remote": {
                        "type": "boolean",
                        "description": "Filter for remote/virtual opportunities."
                      },
                      "categories": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Categories item value for Volunteer Opportunity Search."
                        },
                        "maxItems": 8,
                        "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT."
                      },
                      "page": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 100,
                        "default": 0,
                        "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100."
                      },
                      "limit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100,
                        "default": 20,
                        "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "volunteer-opportunity-search",
            "url": "https://agentbodega.store/api/public-data/volunteer-opportunity-search",
            "method": "POST",
            "description": "Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.",
            "longDescription": "Purpose: Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nBest use: Use this when an agent needs search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, opportunityUrl, lat, lon, radiusMiles, remote, categories, page, limit, proxiesSx.\n\nAccepted fields:\n- query (optional, string): Search text.\n- opportunityUrl (optional, string): Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls. Constraints: format: uri.\n- lat (optional, number): Lat numeric value for Volunteer Opportunity Search.\n- lon (optional, number): Lon numeric value for Volunteer Opportunity Search.\n- radiusMiles (optional, number): Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250. Constraints: default: 25; min: 1; max: 250.\n- remote (optional, boolean): Filter for remote/virtual opportunities.\n- categories (optional, array): Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT. Constraints: max items: 8.\n- page (optional, integer): Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100. Constraints: default: 0; min: 0; max: 100.\n- limit (optional, integer): Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100. Constraints: default: 20; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"query\": \"food bank\",\n  \"lat\": 40.7128,\n  \"lon\": -74.006,\n  \"radiusMiles\": 25,\n  \"categories\": [\n    \"HUNGER_FOOD_SECURITY\"\n  ],\n  \"limit\": 10\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Volunteer Opportunity Search",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "volunteering",
              "opportunities",
              "civic",
              "nonprofit",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "query",
                "opportunityUrl",
                "lat",
                "lon",
                "radiusMiles",
                "remote",
                "categories",
                "page",
                "limit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "query",
                  "type": "string",
                  "required": false,
                  "description": "Search text."
                },
                {
                  "name": "opportunityUrl",
                  "type": "string",
                  "required": false,
                  "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "lat",
                  "type": "number",
                  "required": false,
                  "description": "Lat numeric value for Volunteer Opportunity Search."
                },
                {
                  "name": "lon",
                  "type": "number",
                  "required": false,
                  "description": "Lon numeric value for Volunteer Opportunity Search."
                },
                {
                  "name": "radiusMiles",
                  "type": "number",
                  "required": false,
                  "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250.",
                  "constraints": {
                    "default": 25,
                    "minimum": 1,
                    "maximum": 250
                  }
                },
                {
                  "name": "remote",
                  "type": "boolean",
                  "required": false,
                  "description": "Filter for remote/virtual opportunities."
                },
                {
                  "name": "categories",
                  "type": "array",
                  "required": false,
                  "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT.",
                  "constraints": {
                    "maxItems": 8
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "page",
                  "type": "integer",
                  "required": false,
                  "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100.",
                  "constraints": {
                    "default": 0,
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                {
                  "name": "limit",
                  "type": "integer",
                  "required": false,
                  "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100.",
                  "constraints": {
                    "default": 20,
                    "minimum": 1,
                    "maximum": 100
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "query": "food bank",
                "lat": 40.7128,
                "lon": -74.006,
                "radiusMiles": 25,
                "categories": [
                  "HUNGER_FOOD_SECURITY"
                ],
                "limit": 10
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "query": {
                  "type": "string",
                  "description": "Search text."
                },
                "opportunityUrl": {
                  "type": "string",
                  "format": "uri",
                  "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls."
                },
                "lat": {
                  "type": "number",
                  "description": "Lat numeric value for Volunteer Opportunity Search."
                },
                "lon": {
                  "type": "number",
                  "description": "Lon numeric value for Volunteer Opportunity Search."
                },
                "radiusMiles": {
                  "type": "number",
                  "minimum": 1,
                  "maximum": 250,
                  "default": 25,
                  "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250."
                },
                "remote": {
                  "type": "boolean",
                  "description": "Filter for remote/virtual opportunities."
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Categories item value for Volunteer Opportunity Search."
                  },
                  "maxItems": 8,
                  "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT."
                },
                "page": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "default": 0,
                  "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100,
                  "default": 20,
                  "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/volunteer-opportunity-search",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/volunteer-opportunity-search",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "civic-opportunities",
          "aisle": "Civic Opportunities",
          "shelfId": "civic-opportunities",
          "shelf": "Civic Opportunities",
          "offeringId": "volunteer-opportunity-search",
          "offering": "Volunteer Opportunity Search",
          "pathIds": [
            "public-data",
            "civic-opportunities",
            "civic-opportunities",
            "volunteer-opportunity-search"
          ],
          "pathLabels": [
            "Public Data",
            "Civic Opportunities",
            "Civic Opportunities",
            "Volunteer Opportunity Search"
          ],
          "taxonomyPath": "public-data.civic-opportunities.civic-opportunities.volunteer-opportunity-search",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "civic-opportunities",
              "name": "Civic Opportunities"
            },
            "shelf": {
              "id": "civic-opportunities",
              "name": "Civic Opportunities"
            },
            "offering": {
              "id": "volunteer-opportunity-search",
              "name": "Volunteer Opportunity Search"
            },
            "pathIds": [
              "public-data",
              "civic-opportunities",
              "civic-opportunities",
              "volunteer-opportunity-search"
            ],
            "pathLabels": [
              "Public Data",
              "Civic Opportunities",
              "Civic Opportunities",
              "Volunteer Opportunity Search"
            ]
          }
        },
        "description": {
          "short": "Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.",
          "full": "Purpose: Search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nBest use: Use this when an agent needs search public volunteer opportunities by query, cause, remote/local mode, lat/lon, radius, page, and result limit.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: query, opportunityUrl, lat, lon, radiusMiles, remote, categories, page, limit, proxiesSx.\n\nAccepted fields:\n- query (optional, string): Search text.\n- opportunityUrl (optional, string): Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls. Constraints: format: uri.\n- lat (optional, number): Lat numeric value for Volunteer Opportunity Search.\n- lon (optional, number): Lon numeric value for Volunteer Opportunity Search.\n- radiusMiles (optional, number): Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250. Constraints: default: 25; min: 1; max: 250.\n- remote (optional, boolean): Filter for remote/virtual opportunities.\n- categories (optional, array): Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT. Constraints: max items: 8.\n- page (optional, integer): Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100. Constraints: default: 0; min: 0; max: 100.\n- limit (optional, integer): Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100. Constraints: default: 20; min: 1; max: 100.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"query\": \"food bank\",\n  \"lat\": 40.7128,\n  \"lon\": -74.006,\n  \"radiusMiles\": 25,\n  \"categories\": [\n    \"HUNGER_FOOD_SECURITY\"\n  ],\n  \"limit\": 10\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Search text."
            },
            "opportunityUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls."
            },
            "lat": {
              "type": "number",
              "description": "Lat numeric value for Volunteer Opportunity Search."
            },
            "lon": {
              "type": "number",
              "description": "Lon numeric value for Volunteer Opportunity Search."
            },
            "radiusMiles": {
              "type": "number",
              "minimum": 1,
              "maximum": 250,
              "default": 25,
              "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250."
            },
            "remote": {
              "type": "boolean",
              "description": "Filter for remote/virtual opportunities."
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Categories item value for Volunteer Opportunity Search."
              },
              "maxItems": 8,
              "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT."
            },
            "page": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100,
              "default": 0,
              "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Search text."
            },
            "opportunityUrl": {
              "type": "string",
              "format": "uri",
              "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls."
            },
            "lat": {
              "type": "number",
              "description": "Lat numeric value for Volunteer Opportunity Search."
            },
            "lon": {
              "type": "number",
              "description": "Lon numeric value for Volunteer Opportunity Search."
            },
            "radiusMiles": {
              "type": "number",
              "minimum": 1,
              "maximum": 250,
              "default": 25,
              "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250."
            },
            "remote": {
              "type": "boolean",
              "description": "Filter for remote/virtual opportunities."
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Categories item value for Volunteer Opportunity Search."
              },
              "maxItems": 8,
              "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT."
            },
            "page": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100,
              "default": 0,
              "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100."
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20,
              "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "query",
            "opportunityUrl",
            "lat",
            "lon",
            "radiusMiles",
            "remote",
            "categories",
            "page",
            "limit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "query",
              "type": "string",
              "required": false,
              "description": "Search text."
            },
            {
              "name": "opportunityUrl",
              "type": "string",
              "required": false,
              "description": "Optional direct opportunity URL. Prefer query/location filters for whitelabeled calls.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "lat",
              "type": "number",
              "required": false,
              "description": "Lat numeric value for Volunteer Opportunity Search."
            },
            {
              "name": "lon",
              "type": "number",
              "required": false,
              "description": "Lon numeric value for Volunteer Opportunity Search."
            },
            {
              "name": "radiusMiles",
              "type": "number",
              "required": false,
              "description": "Radius Miles numeric value for Volunteer Opportunity Search. Constraints: default: 25; min: 1; max: 250.",
              "constraints": {
                "default": 25,
                "minimum": 1,
                "maximum": 250
              }
            },
            {
              "name": "remote",
              "type": "boolean",
              "required": false,
              "description": "Filter for remote/virtual opportunities."
            },
            {
              "name": "categories",
              "type": "array",
              "required": false,
              "description": "Cause/category values, such as ANIMALS, EDUCATION, HEALTH_MEDICINE, or ENVIRONMENT.",
              "constraints": {
                "maxItems": 8
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "page",
              "type": "integer",
              "required": false,
              "description": "Page numeric value for Volunteer Opportunity Search. Constraints: default: 0; min: 0; max: 100.",
              "constraints": {
                "default": 0,
                "minimum": 0,
                "maximum": 100
              }
            },
            {
              "name": "limit",
              "type": "integer",
              "required": false,
              "description": "Limit numeric value for Volunteer Opportunity Search. Constraints: default: 20; min: 1; max: 100.",
              "constraints": {
                "default": 20,
                "minimum": 1,
                "maximum": 100
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "query": "food bank",
            "lat": 40.7128,
            "lon": -74.006,
            "radiusMiles": 25,
            "categories": [
              "HUNGER_FOOD_SECURITY"
            ],
            "limit": 10
          }
        },
        "exampleRequest": {
          "query": "food bank",
          "lat": 40.7128,
          "lon": -74.006,
          "radiusMiles": 25,
          "categories": [
            "HUNGER_FOOD_SECURITY"
          ],
          "limit": 10
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "volunteer-opportunity-search",
            "name": "Volunteer Opportunity Search",
            "department": "Public Data"
          },
          "total": 128,
          "results": [
            {
              "id": "abc123",
              "title": "Pack meals for neighbors",
              "organization": "Example Food Bank",
              "location": {
                "city": "New York",
                "state": "NY"
              },
              "remote": false
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/public-data/us-weather-forecast",
      "type": "http",
      "x402Version": 2,
      "serviceName": "US Weather Forecast",
      "description": "Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.",
      "longDescription": "Purpose: Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nBest use: Use this when an agent needs return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: lat, lon, zip, city, state, location, includeCurrent, includeHourly, includeAlerts, includeOffice, hourlyLimit, dailyLimit, proxiesSx.\n\nAccepted fields:\n- lat (optional, number): Latitude for a US point. Must be paired with lon. Constraints: min: -90; max: 90.\n- lon (optional, number): Longitude for a US point. Must be paired with lat. Constraints: min: -180; max: 180.\n- zip (optional, string): US ZIP code to geocode before forecast lookup.\n- city (optional, string): US city name. Pair with state for best geocoding.\n- state (optional, string): US state name or two-letter abbreviation for city lookup.\n- location (optional, string): Free-form US place query when lat/lon, zip, or city/state are not supplied.\n- includeCurrent (optional, boolean): Fetch the nearest station's latest observation. Constraints: default: true.\n- includeHourly (optional, boolean): Fetch the hourly forecast. Constraints: default: true.\n- includeAlerts (optional, boolean): Fetch active watches, warnings, and advisories for the point. Constraints: default: true.\n- includeOffice (optional, boolean): Fetch forecast-center metadata such as name, phone, and email when available. Constraints: default: false.\n- hourlyLimit (optional, integer): Maximum hourly periods to return. Constraints: default: 24; min: 1; max: 72.\n- dailyLimit (optional, integer): Maximum multi-day forecast periods to return. Constraints: default: 14; min: 1; max: 14.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"Boulder\",\n  \"state\": \"CO\",\n  \"hourlyLimit\": 24,\n  \"includeAlerts\": true\n}\n```",
      "category": "public-data",
      "kind": "public-data-tool",
      "departmentId": "public-data",
      "department": "Public Data",
      "aisleId": "weather",
      "aisle": "Weather",
      "shelfId": "weather",
      "shelf": "Weather",
      "offeringId": "us-weather-forecast",
      "offering": "US Weather Forecast",
      "pathIds": [
        "public-data",
        "weather",
        "weather",
        "us-weather-forecast"
      ],
      "pathLabels": [
        "Public Data",
        "Weather",
        "Weather",
        "US Weather Forecast"
      ],
      "taxonomyPath": "public-data.weather.weather.us-weather-forecast",
      "layout": {
        "department": {
          "id": "public-data",
          "name": "Public Data"
        },
        "aisle": {
          "id": "weather",
          "name": "Weather"
        },
        "shelf": {
          "id": "weather",
          "name": "Weather"
        },
        "offering": {
          "id": "us-weather-forecast",
          "name": "US Weather Forecast"
        },
        "pathIds": [
          "public-data",
          "weather",
          "weather",
          "us-weather-forecast"
        ],
        "pathLabels": [
          "Public Data",
          "Weather",
          "Weather",
          "US Weather Forecast"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "weather",
        "forecast",
        "alerts",
        "public-data"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "lat": {
            "type": "number",
            "minimum": -90,
            "maximum": 90,
            "description": "Latitude for a US point. Must be paired with lon."
          },
          "lon": {
            "type": "number",
            "minimum": -180,
            "maximum": 180,
            "description": "Longitude for a US point. Must be paired with lat."
          },
          "zip": {
            "type": "string",
            "description": "US ZIP code to geocode before forecast lookup."
          },
          "city": {
            "type": "string",
            "description": "US city name. Pair with state for best geocoding."
          },
          "state": {
            "type": "string",
            "description": "US state name or two-letter abbreviation for city lookup."
          },
          "location": {
            "type": "string",
            "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
          },
          "includeCurrent": {
            "type": "boolean",
            "default": true,
            "description": "Fetch the nearest station's latest observation."
          },
          "includeHourly": {
            "type": "boolean",
            "default": true,
            "description": "Fetch the hourly forecast."
          },
          "includeAlerts": {
            "type": "boolean",
            "default": true,
            "description": "Fetch active watches, warnings, and advisories for the point."
          },
          "includeOffice": {
            "type": "boolean",
            "default": false,
            "description": "Fetch forecast-center metadata such as name, phone, and email when available."
          },
          "hourlyLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 72,
            "default": 24,
            "description": "Maximum hourly periods to return."
          },
          "dailyLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 14,
            "default": 14,
            "description": "Maximum multi-day forecast periods to return."
          },
          "proxiesSx": {
            "type": [
              "boolean",
              "object"
            ],
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "properties": {
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "default": "US",
                "description": "Two-letter country code for the Proxies.sx pool, for example US."
              },
              "session": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
              },
              "rotation": {
                "type": "string",
                "enum": [
                  "sticky",
                  "hard",
                  "auto5",
                  "auto10",
                  "auto20",
                  "auto60",
                  "ondemand"
                ],
                "default": "sticky",
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
              },
              "pool": {
                "type": "string",
                "enum": [
                  "mobile",
                  "residential",
                  "any"
                ],
                "default": "mobile",
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
              },
              "reason": {
                "type": "string",
                "maxLength": 160,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "lat",
          "lon",
          "zip",
          "city",
          "state",
          "location",
          "includeCurrent",
          "includeHourly",
          "includeAlerts",
          "includeOffice",
          "hourlyLimit",
          "dailyLimit",
          "proxiesSx"
        ],
        "fields": [
          {
            "name": "lat",
            "type": "number",
            "required": false,
            "description": "Latitude for a US point. Must be paired with lon.",
            "constraints": {
              "minimum": -90,
              "maximum": 90
            }
          },
          {
            "name": "lon",
            "type": "number",
            "required": false,
            "description": "Longitude for a US point. Must be paired with lat.",
            "constraints": {
              "minimum": -180,
              "maximum": 180
            }
          },
          {
            "name": "zip",
            "type": "string",
            "required": false,
            "description": "US ZIP code to geocode before forecast lookup."
          },
          {
            "name": "city",
            "type": "string",
            "required": false,
            "description": "US city name. Pair with state for best geocoding."
          },
          {
            "name": "state",
            "type": "string",
            "required": false,
            "description": "US state name or two-letter abbreviation for city lookup."
          },
          {
            "name": "location",
            "type": "string",
            "required": false,
            "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
          },
          {
            "name": "includeCurrent",
            "type": "boolean",
            "required": false,
            "description": "Fetch the nearest station's latest observation.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeHourly",
            "type": "boolean",
            "required": false,
            "description": "Fetch the hourly forecast.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeAlerts",
            "type": "boolean",
            "required": false,
            "description": "Fetch active watches, warnings, and advisories for the point.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeOffice",
            "type": "boolean",
            "required": false,
            "description": "Fetch forecast-center metadata such as name, phone, and email when available.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "hourlyLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum hourly periods to return.",
            "constraints": {
              "default": 24,
              "minimum": 1,
              "maximum": 72
            }
          },
          {
            "name": "dailyLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum multi-day forecast periods to return.",
            "constraints": {
              "default": 14,
              "minimum": 1,
              "maximum": 14
            }
          },
          {
            "name": "proxiesSx",
            "type": "boolean | object",
            "required": false,
            "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
            "fields": [
              {
                "name": "enabled",
                "type": "boolean",
                "required": false,
                "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                "constraints": {
                  "default": true
                }
              },
              {
                "name": "country",
                "type": "string",
                "required": false,
                "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                "constraints": {
                  "default": "US",
                  "minLength": 2,
                  "maxLength": 2
                }
              },
              {
                "name": "session",
                "type": "string",
                "required": false,
                "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                "constraints": {
                  "maxLength": 64
                }
              },
              {
                "name": "rotation",
                "type": "string",
                "required": false,
                "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                "constraints": {
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky"
                }
              },
              {
                "name": "pool",
                "type": "string",
                "required": false,
                "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                "constraints": {
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile"
                }
              },
              {
                "name": "reason",
                "type": "string",
                "required": false,
                "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                "constraints": {
                  "maxLength": 160
                }
              }
            ]
          }
        ],
        "additionalProperties": false,
        "example": {
          "city": "Boulder",
          "state": "CO",
          "hourlyLimit": 24,
          "includeAlerts": true
        }
      },
      "exampleRequest": {
        "city": "Boulder",
        "state": "CO",
        "hourlyLimit": 24,
        "includeAlerts": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "requested",
          "checkedAt"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "requested": {
            "type": "object",
            "additionalProperties": true
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "egress": {
            "type": "object",
            "additionalProperties": true
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "us-weather-forecast",
          "name": "US Weather Forecast",
          "department": "Public Data"
        },
        "location": {
          "input": "Boulder, CO",
          "lat": 40.015,
          "lon": -105.2705,
          "relative_location": {
            "city": "Boulder",
            "state": "CO"
          },
          "time_zone": "America/Denver"
        },
        "grid": {
          "wfo": "BOU",
          "gridX": 54,
          "gridY": 74
        },
        "current_observation": {
          "station_id": "KBDU",
          "text_description": "Mostly Cloudy",
          "temperature_f": 71.6
        },
        "forecast_multi_day": [
          {
            "name": "Tonight",
            "temperature": 54,
            "temperature_unit": "F",
            "short_forecast": "Partly Cloudy"
          }
        ],
        "forecast_hourly": [
          {
            "start_time": "2026-07-03T18:00:00-06:00",
            "temperature": 72,
            "temperature_unit": "F",
            "short_forecast": "Sunny"
          }
        ],
        "alerts": []
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "city": "Boulder",
                "state": "CO",
                "hourlyLimit": 24,
                "includeAlerts": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "us-weather-forecast",
                  "name": "US Weather Forecast",
                  "department": "Public Data"
                },
                "location": {
                  "input": "Boulder, CO",
                  "lat": 40.015,
                  "lon": -105.2705,
                  "relative_location": {
                    "city": "Boulder",
                    "state": "CO"
                  },
                  "time_zone": "America/Denver"
                },
                "grid": {
                  "wfo": "BOU",
                  "gridX": 54,
                  "gridY": 74
                },
                "current_observation": {
                  "station_id": "KBDU",
                  "text_description": "Mostly Cloudy",
                  "temperature_f": 71.6
                },
                "forecast_multi_day": [
                  {
                    "name": "Tonight",
                    "temperature": 54,
                    "temperature_unit": "F",
                    "short_forecast": "Partly Cloudy"
                  }
                ],
                "forecast_hourly": [
                  {
                    "start_time": "2026-07-03T18:00:00-06:00",
                    "temperature": 72,
                    "temperature_unit": "F",
                    "short_forecast": "Sunny"
                  }
                ],
                "alerts": []
              }
            }
          },
          "routeTemplate": "/api/public-data/us-weather-forecast",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "lat": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Latitude for a US point. Must be paired with lon."
                      },
                      "lon": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Longitude for a US point. Must be paired with lat."
                      },
                      "zip": {
                        "type": "string",
                        "description": "US ZIP code to geocode before forecast lookup."
                      },
                      "city": {
                        "type": "string",
                        "description": "US city name. Pair with state for best geocoding."
                      },
                      "state": {
                        "type": "string",
                        "description": "US state name or two-letter abbreviation for city lookup."
                      },
                      "location": {
                        "type": "string",
                        "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
                      },
                      "includeCurrent": {
                        "type": "boolean",
                        "default": true,
                        "description": "Fetch the nearest station's latest observation."
                      },
                      "includeHourly": {
                        "type": "boolean",
                        "default": true,
                        "description": "Fetch the hourly forecast."
                      },
                      "includeAlerts": {
                        "type": "boolean",
                        "default": true,
                        "description": "Fetch active watches, warnings, and advisories for the point."
                      },
                      "includeOffice": {
                        "type": "boolean",
                        "default": false,
                        "description": "Fetch forecast-center metadata such as name, phone, and email when available."
                      },
                      "hourlyLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 72,
                        "default": 24,
                        "description": "Maximum hourly periods to return."
                      },
                      "dailyLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 14,
                        "default": 14,
                        "description": "Maximum multi-day forecast periods to return."
                      },
                      "proxiesSx": {
                        "type": [
                          "boolean",
                          "object"
                        ],
                        "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "default": true,
                            "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                          },
                          "country": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "default": "US",
                            "description": "Two-letter country code for the Proxies.sx pool, for example US."
                          },
                          "session": {
                            "type": "string",
                            "maxLength": 64,
                            "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                          },
                          "rotation": {
                            "type": "string",
                            "enum": [
                              "sticky",
                              "hard",
                              "auto5",
                              "auto10",
                              "auto20",
                              "auto60",
                              "ondemand"
                            ],
                            "default": "sticky",
                            "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                          },
                          "pool": {
                            "type": "string",
                            "enum": [
                              "mobile",
                              "residential",
                              "any"
                            ],
                            "default": "mobile",
                            "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                          },
                          "reason": {
                            "type": "string",
                            "maxLength": 160,
                            "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "requested",
                      "checkedAt"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "requested": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "results": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": true
                        }
                      },
                      "result": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "egress": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "us-weather-forecast",
            "url": "https://agentbodega.store/api/public-data/us-weather-forecast",
            "method": "POST",
            "description": "Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.",
            "longDescription": "Purpose: Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nBest use: Use this when an agent needs return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: lat, lon, zip, city, state, location, includeCurrent, includeHourly, includeAlerts, includeOffice, hourlyLimit, dailyLimit, proxiesSx.\n\nAccepted fields:\n- lat (optional, number): Latitude for a US point. Must be paired with lon. Constraints: min: -90; max: 90.\n- lon (optional, number): Longitude for a US point. Must be paired with lat. Constraints: min: -180; max: 180.\n- zip (optional, string): US ZIP code to geocode before forecast lookup.\n- city (optional, string): US city name. Pair with state for best geocoding.\n- state (optional, string): US state name or two-letter abbreviation for city lookup.\n- location (optional, string): Free-form US place query when lat/lon, zip, or city/state are not supplied.\n- includeCurrent (optional, boolean): Fetch the nearest station's latest observation. Constraints: default: true.\n- includeHourly (optional, boolean): Fetch the hourly forecast. Constraints: default: true.\n- includeAlerts (optional, boolean): Fetch active watches, warnings, and advisories for the point. Constraints: default: true.\n- includeOffice (optional, boolean): Fetch forecast-center metadata such as name, phone, and email when available. Constraints: default: false.\n- hourlyLimit (optional, integer): Maximum hourly periods to return. Constraints: default: 24; min: 1; max: 72.\n- dailyLimit (optional, integer): Maximum multi-day forecast periods to return. Constraints: default: 14; min: 1; max: 14.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"Boulder\",\n  \"state\": \"CO\",\n  \"hourlyLimit\": 24,\n  \"includeAlerts\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "US Weather Forecast",
            "category": "public-data",
            "kind": "public-data-tool",
            "tags": [
              "weather",
              "forecast",
              "alerts",
              "public-data"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "lat",
                "lon",
                "zip",
                "city",
                "state",
                "location",
                "includeCurrent",
                "includeHourly",
                "includeAlerts",
                "includeOffice",
                "hourlyLimit",
                "dailyLimit",
                "proxiesSx"
              ],
              "fields": [
                {
                  "name": "lat",
                  "type": "number",
                  "required": false,
                  "description": "Latitude for a US point. Must be paired with lon.",
                  "constraints": {
                    "minimum": -90,
                    "maximum": 90
                  }
                },
                {
                  "name": "lon",
                  "type": "number",
                  "required": false,
                  "description": "Longitude for a US point. Must be paired with lat.",
                  "constraints": {
                    "minimum": -180,
                    "maximum": 180
                  }
                },
                {
                  "name": "zip",
                  "type": "string",
                  "required": false,
                  "description": "US ZIP code to geocode before forecast lookup."
                },
                {
                  "name": "city",
                  "type": "string",
                  "required": false,
                  "description": "US city name. Pair with state for best geocoding."
                },
                {
                  "name": "state",
                  "type": "string",
                  "required": false,
                  "description": "US state name or two-letter abbreviation for city lookup."
                },
                {
                  "name": "location",
                  "type": "string",
                  "required": false,
                  "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
                },
                {
                  "name": "includeCurrent",
                  "type": "boolean",
                  "required": false,
                  "description": "Fetch the nearest station's latest observation.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeHourly",
                  "type": "boolean",
                  "required": false,
                  "description": "Fetch the hourly forecast.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeAlerts",
                  "type": "boolean",
                  "required": false,
                  "description": "Fetch active watches, warnings, and advisories for the point.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeOffice",
                  "type": "boolean",
                  "required": false,
                  "description": "Fetch forecast-center metadata such as name, phone, and email when available.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "hourlyLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum hourly periods to return.",
                  "constraints": {
                    "default": 24,
                    "minimum": 1,
                    "maximum": 72
                  }
                },
                {
                  "name": "dailyLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum multi-day forecast periods to return.",
                  "constraints": {
                    "default": 14,
                    "minimum": 1,
                    "maximum": 14
                  }
                },
                {
                  "name": "proxiesSx",
                  "type": "boolean | object",
                  "required": false,
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "fields": [
                    {
                      "name": "enabled",
                      "type": "boolean",
                      "required": false,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                      "constraints": {
                        "default": true
                      }
                    },
                    {
                      "name": "country",
                      "type": "string",
                      "required": false,
                      "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                      "constraints": {
                        "default": "US",
                        "minLength": 2,
                        "maxLength": 2
                      }
                    },
                    {
                      "name": "session",
                      "type": "string",
                      "required": false,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                      "constraints": {
                        "maxLength": 64
                      }
                    },
                    {
                      "name": "rotation",
                      "type": "string",
                      "required": false,
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                      "constraints": {
                        "enum": [
                          "sticky",
                          "hard",
                          "auto5",
                          "auto10",
                          "auto20",
                          "auto60",
                          "ondemand"
                        ],
                        "default": "sticky"
                      }
                    },
                    {
                      "name": "pool",
                      "type": "string",
                      "required": false,
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                      "constraints": {
                        "enum": [
                          "mobile",
                          "residential",
                          "any"
                        ],
                        "default": "mobile"
                      }
                    },
                    {
                      "name": "reason",
                      "type": "string",
                      "required": false,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                      "constraints": {
                        "maxLength": 160
                      }
                    }
                  ]
                }
              ],
              "additionalProperties": false,
              "example": {
                "city": "Boulder",
                "state": "CO",
                "hourlyLimit": 24,
                "includeAlerts": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "lat": {
                  "type": "number",
                  "minimum": -90,
                  "maximum": 90,
                  "description": "Latitude for a US point. Must be paired with lon."
                },
                "lon": {
                  "type": "number",
                  "minimum": -180,
                  "maximum": 180,
                  "description": "Longitude for a US point. Must be paired with lat."
                },
                "zip": {
                  "type": "string",
                  "description": "US ZIP code to geocode before forecast lookup."
                },
                "city": {
                  "type": "string",
                  "description": "US city name. Pair with state for best geocoding."
                },
                "state": {
                  "type": "string",
                  "description": "US state name or two-letter abbreviation for city lookup."
                },
                "location": {
                  "type": "string",
                  "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
                },
                "includeCurrent": {
                  "type": "boolean",
                  "default": true,
                  "description": "Fetch the nearest station's latest observation."
                },
                "includeHourly": {
                  "type": "boolean",
                  "default": true,
                  "description": "Fetch the hourly forecast."
                },
                "includeAlerts": {
                  "type": "boolean",
                  "default": true,
                  "description": "Fetch active watches, warnings, and advisories for the point."
                },
                "includeOffice": {
                  "type": "boolean",
                  "default": false,
                  "description": "Fetch forecast-center metadata such as name, phone, and email when available."
                },
                "hourlyLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 72,
                  "default": 24,
                  "description": "Maximum hourly periods to return."
                },
                "dailyLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 14,
                  "default": 14,
                  "description": "Maximum multi-day forecast periods to return."
                },
                "proxiesSx": {
                  "type": [
                    "boolean",
                    "object"
                  ],
                  "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
                  "properties": {
                    "enabled": {
                      "type": "boolean",
                      "default": true,
                      "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                    },
                    "country": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 2,
                      "default": "US",
                      "description": "Two-letter country code for the Proxies.sx pool, for example US."
                    },
                    "session": {
                      "type": "string",
                      "maxLength": 64,
                      "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                    },
                    "rotation": {
                      "type": "string",
                      "enum": [
                        "sticky",
                        "hard",
                        "auto5",
                        "auto10",
                        "auto20",
                        "auto60",
                        "ondemand"
                      ],
                      "default": "sticky",
                      "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                    },
                    "pool": {
                      "type": "string",
                      "enum": [
                        "mobile",
                        "residential",
                        "any"
                      ],
                      "default": "mobile",
                      "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                    },
                    "reason": {
                      "type": "string",
                      "maxLength": 160,
                      "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "requested",
                "checkedAt"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "requested": {
                  "type": "object",
                  "additionalProperties": true
                },
                "results": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "result": {
                  "type": "object",
                  "additionalProperties": true
                },
                "egress": {
                  "type": "object",
                  "additionalProperties": true
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/public-data/us-weather-forecast",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/public-data/us-weather-forecast",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "public-data",
        "kind": "public-data-tool",
        "taxonomy": {
          "departmentId": "public-data",
          "department": "Public Data",
          "aisleId": "weather",
          "aisle": "Weather",
          "shelfId": "weather",
          "shelf": "Weather",
          "offeringId": "us-weather-forecast",
          "offering": "US Weather Forecast",
          "pathIds": [
            "public-data",
            "weather",
            "weather",
            "us-weather-forecast"
          ],
          "pathLabels": [
            "Public Data",
            "Weather",
            "Weather",
            "US Weather Forecast"
          ],
          "taxonomyPath": "public-data.weather.weather.us-weather-forecast",
          "layout": {
            "department": {
              "id": "public-data",
              "name": "Public Data"
            },
            "aisle": {
              "id": "weather",
              "name": "Weather"
            },
            "shelf": {
              "id": "weather",
              "name": "Weather"
            },
            "offering": {
              "id": "us-weather-forecast",
              "name": "US Weather Forecast"
            },
            "pathIds": [
              "public-data",
              "weather",
              "weather",
              "us-weather-forecast"
            ],
            "pathLabels": [
              "Public Data",
              "Weather",
              "Weather",
              "US Weather Forecast"
            ]
          }
        },
        "description": {
          "short": "Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.",
          "full": "Purpose: Return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nBest use: Use this when an agent needs return a US weather forecast for a point by latitude/longitude, ZIP code, or city/state, including current observation, hourly forecast, multi-day periods, alerts, and grid metadata.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: lat, lon, zip, city, state, location, includeCurrent, includeHourly, includeAlerts, includeOffice, hourlyLimit, dailyLimit, proxiesSx.\n\nAccepted fields:\n- lat (optional, number): Latitude for a US point. Must be paired with lon. Constraints: min: -90; max: 90.\n- lon (optional, number): Longitude for a US point. Must be paired with lat. Constraints: min: -180; max: 180.\n- zip (optional, string): US ZIP code to geocode before forecast lookup.\n- city (optional, string): US city name. Pair with state for best geocoding.\n- state (optional, string): US state name or two-letter abbreviation for city lookup.\n- location (optional, string): Free-form US place query when lat/lon, zip, or city/state are not supplied.\n- includeCurrent (optional, boolean): Fetch the nearest station's latest observation. Constraints: default: true.\n- includeHourly (optional, boolean): Fetch the hourly forecast. Constraints: default: true.\n- includeAlerts (optional, boolean): Fetch active watches, warnings, and advisories for the point. Constraints: default: true.\n- includeOffice (optional, boolean): Fetch forecast-center metadata such as name, phone, and email when available. Constraints: default: false.\n- hourlyLimit (optional, integer): Maximum hourly periods to return. Constraints: default: 24; min: 1; max: 72.\n- dailyLimit (optional, integer): Maximum multi-day forecast periods to return. Constraints: default: 14; min: 1; max: 14.\n- proxiesSx (optional, boolean | object): Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers. Object accepts: enabled, country, session, rotation, pool, reason.\n\nExample request body:\n```json\n{\n  \"city\": \"Boulder\",\n  \"state\": \"CO\",\n  \"hourlyLimit\": 24,\n  \"includeAlerts\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "lat": {
              "type": "number",
              "minimum": -90,
              "maximum": 90,
              "description": "Latitude for a US point. Must be paired with lon."
            },
            "lon": {
              "type": "number",
              "minimum": -180,
              "maximum": 180,
              "description": "Longitude for a US point. Must be paired with lat."
            },
            "zip": {
              "type": "string",
              "description": "US ZIP code to geocode before forecast lookup."
            },
            "city": {
              "type": "string",
              "description": "US city name. Pair with state for best geocoding."
            },
            "state": {
              "type": "string",
              "description": "US state name or two-letter abbreviation for city lookup."
            },
            "location": {
              "type": "string",
              "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
            },
            "includeCurrent": {
              "type": "boolean",
              "default": true,
              "description": "Fetch the nearest station's latest observation."
            },
            "includeHourly": {
              "type": "boolean",
              "default": true,
              "description": "Fetch the hourly forecast."
            },
            "includeAlerts": {
              "type": "boolean",
              "default": true,
              "description": "Fetch active watches, warnings, and advisories for the point."
            },
            "includeOffice": {
              "type": "boolean",
              "default": false,
              "description": "Fetch forecast-center metadata such as name, phone, and email when available."
            },
            "hourlyLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 72,
              "default": 24,
              "description": "Maximum hourly periods to return."
            },
            "dailyLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 14,
              "default": 14,
              "description": "Maximum multi-day forecast periods to return."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "lat": {
              "type": "number",
              "minimum": -90,
              "maximum": 90,
              "description": "Latitude for a US point. Must be paired with lon."
            },
            "lon": {
              "type": "number",
              "minimum": -180,
              "maximum": 180,
              "description": "Longitude for a US point. Must be paired with lat."
            },
            "zip": {
              "type": "string",
              "description": "US ZIP code to geocode before forecast lookup."
            },
            "city": {
              "type": "string",
              "description": "US city name. Pair with state for best geocoding."
            },
            "state": {
              "type": "string",
              "description": "US state name or two-letter abbreviation for city lookup."
            },
            "location": {
              "type": "string",
              "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
            },
            "includeCurrent": {
              "type": "boolean",
              "default": true,
              "description": "Fetch the nearest station's latest observation."
            },
            "includeHourly": {
              "type": "boolean",
              "default": true,
              "description": "Fetch the hourly forecast."
            },
            "includeAlerts": {
              "type": "boolean",
              "default": true,
              "description": "Fetch active watches, warnings, and advisories for the point."
            },
            "includeOffice": {
              "type": "boolean",
              "default": false,
              "description": "Fetch forecast-center metadata such as name, phone, and email when available."
            },
            "hourlyLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 72,
              "default": 24,
              "description": "Maximum hourly periods to return."
            },
            "dailyLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 14,
              "default": 14,
              "description": "Maximum multi-day forecast periods to return."
            },
            "proxiesSx": {
              "type": [
                "boolean",
                "object"
              ],
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled."
                },
                "country": {
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 2,
                  "default": "US",
                  "description": "Two-letter country code for the Proxies.sx pool, for example US."
                },
                "session": {
                  "type": "string",
                  "maxLength": 64,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity."
                },
                "rotation": {
                  "type": "string",
                  "enum": [
                    "sticky",
                    "hard",
                    "auto5",
                    "auto10",
                    "auto20",
                    "auto60",
                    "ondemand"
                  ],
                  "default": "sticky",
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP."
                },
                "pool": {
                  "type": "string",
                  "enum": [
                    "mobile",
                    "residential",
                    "any"
                  ],
                  "default": "mobile",
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose."
                },
                "reason": {
                  "type": "string",
                  "maxLength": 160,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress."
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "lat",
            "lon",
            "zip",
            "city",
            "state",
            "location",
            "includeCurrent",
            "includeHourly",
            "includeAlerts",
            "includeOffice",
            "hourlyLimit",
            "dailyLimit",
            "proxiesSx"
          ],
          "fields": [
            {
              "name": "lat",
              "type": "number",
              "required": false,
              "description": "Latitude for a US point. Must be paired with lon.",
              "constraints": {
                "minimum": -90,
                "maximum": 90
              }
            },
            {
              "name": "lon",
              "type": "number",
              "required": false,
              "description": "Longitude for a US point. Must be paired with lat.",
              "constraints": {
                "minimum": -180,
                "maximum": 180
              }
            },
            {
              "name": "zip",
              "type": "string",
              "required": false,
              "description": "US ZIP code to geocode before forecast lookup."
            },
            {
              "name": "city",
              "type": "string",
              "required": false,
              "description": "US city name. Pair with state for best geocoding."
            },
            {
              "name": "state",
              "type": "string",
              "required": false,
              "description": "US state name or two-letter abbreviation for city lookup."
            },
            {
              "name": "location",
              "type": "string",
              "required": false,
              "description": "Free-form US place query when lat/lon, zip, or city/state are not supplied."
            },
            {
              "name": "includeCurrent",
              "type": "boolean",
              "required": false,
              "description": "Fetch the nearest station's latest observation.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeHourly",
              "type": "boolean",
              "required": false,
              "description": "Fetch the hourly forecast.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeAlerts",
              "type": "boolean",
              "required": false,
              "description": "Fetch active watches, warnings, and advisories for the point.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeOffice",
              "type": "boolean",
              "required": false,
              "description": "Fetch forecast-center metadata such as name, phone, and email when available.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "hourlyLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum hourly periods to return.",
              "constraints": {
                "default": 24,
                "minimum": 1,
                "maximum": 72
              }
            },
            {
              "name": "dailyLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum multi-day forecast periods to return.",
              "constraints": {
                "default": 14,
                "minimum": 1,
                "maximum": 14
              }
            },
            {
              "name": "proxiesSx",
              "type": "boolean | object",
              "required": false,
              "description": "Optional Proxies.sx egress hint for services that need mobile/residential fetches. Pass true for default US mobile egress, or an object with enabled, country, session, and rotation. Credentials and proxy URLs are never accepted from callers.",
              "fields": [
                {
                  "name": "enabled",
                  "type": "boolean",
                  "required": false,
                  "description": "Set false to force direct Worker egress when service-level Proxies.sx default routing is enabled.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "country",
                  "type": "string",
                  "required": false,
                  "description": "Two-letter country code for the Proxies.sx pool, for example US.",
                  "constraints": {
                    "default": "US",
                    "minLength": 2,
                    "maxLength": 2
                  }
                },
                {
                  "name": "session",
                  "type": "string",
                  "required": false,
                  "description": "Optional sticky-session key. Use stable, non-secret text when you need repeated calls to keep the same mobile identity.",
                  "constraints": {
                    "maxLength": 64
                  }
                },
                {
                  "name": "rotation",
                  "type": "string",
                  "required": false,
                  "description": "Rotation mode requested from the runner. sticky keeps the same session; hard asks for a fresh mobile IP.",
                  "constraints": {
                    "enum": [
                      "sticky",
                      "hard",
                      "auto5",
                      "auto10",
                      "auto20",
                      "auto60",
                      "ondemand"
                    ],
                    "default": "sticky"
                  }
                },
                {
                  "name": "pool",
                  "type": "string",
                  "required": false,
                  "description": "Optional pool preference. mobile maps to the Proxies.sx mbl pool, residential maps to peer, and any lets the gateway choose.",
                  "constraints": {
                    "enum": [
                      "mobile",
                      "residential",
                      "any"
                    ],
                    "default": "mobile"
                  }
                },
                {
                  "name": "reason",
                  "type": "string",
                  "required": false,
                  "description": "Optional caller note for internal observability, such as blocked-direct-worker-egress.",
                  "constraints": {
                    "maxLength": 160
                  }
                }
              ]
            }
          ],
          "additionalProperties": false,
          "example": {
            "city": "Boulder",
            "state": "CO",
            "hourlyLimit": 24,
            "includeAlerts": true
          }
        },
        "exampleRequest": {
          "city": "Boulder",
          "state": "CO",
          "hourlyLimit": 24,
          "includeAlerts": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "requested",
            "checkedAt"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "requested": {
              "type": "object",
              "additionalProperties": true
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "result": {
              "type": "object",
              "additionalProperties": true
            },
            "egress": {
              "type": "object",
              "additionalProperties": true
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "us-weather-forecast",
            "name": "US Weather Forecast",
            "department": "Public Data"
          },
          "location": {
            "input": "Boulder, CO",
            "lat": 40.015,
            "lon": -105.2705,
            "relative_location": {
              "city": "Boulder",
              "state": "CO"
            },
            "time_zone": "America/Denver"
          },
          "grid": {
            "wfo": "BOU",
            "gridX": 54,
            "gridY": 74
          },
          "current_observation": {
            "station_id": "KBDU",
            "text_description": "Mostly Cloudy",
            "temperature_f": 71.6
          },
          "forecast_multi_day": [
            {
              "name": "Tonight",
              "temperature": 54,
              "temperature_unit": "F",
              "short_forecast": "Partly Cloudy"
            }
          ],
          "forecast_hourly": [
            {
              "start_time": "2026-07-03T18:00:00-06:00",
              "temperature": 72,
              "temperature_unit": "F",
              "short_forecast": "Sunny"
            }
          ],
          "alerts": []
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/check",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Official Service Status Check",
      "description": "Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.",
      "longDescription": "Purpose: Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nBest use: Use this when an agent needs check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: service.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- service (required, string): Service id from /api/status/catalog, for example github or gitlab.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Official Service Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"service\": \"github\",\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "utility",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "status-checks",
      "aisle": "Status Checks",
      "offeringId": "official-status-check",
      "offering": "Official Service Status Check",
      "pathIds": [
        "official-status",
        "status-checks",
        "official-status-check"
      ],
      "pathLabels": [
        "Status & Infra",
        "Status Checks",
        "Official Service Status Check"
      ],
      "taxonomyPath": "official-status.status-checks.official-status-check",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "status-checks",
          "name": "Status Checks"
        },
        "offering": {
          "id": "official-status-check",
          "name": "Official Service Status Check"
        },
        "pathIds": [
          "official-status",
          "status-checks",
          "official-status-check"
        ],
        "pathLabels": [
          "Status & Infra",
          "Status Checks",
          "Official Service Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "github",
        "gitlab",
        "deploy-readiness",
        "incident-response",
        "agent-tools"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "service"
        ],
        "properties": {
          "service": {
            "type": "string",
            "description": "Service id from /api/status/catalog, for example github or gitlab."
          },
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Official Service Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "service"
        ],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "service",
            "type": "string",
            "required": true,
            "description": "Service id from /api/status/catalog, for example github or gitlab."
          },
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "service": "github",
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "service": "github",
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "id": "github",
          "name": "GitHub"
        },
        "ok": true,
        "status": "operational",
        "label": "All Systems Operational",
        "source": {
          "type": "managed-status-source",
          "cached": false,
          "stale": false
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "service": "github",
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "id": "github",
                  "name": "GitHub"
                },
                "ok": true,
                "status": "operational",
                "label": "All Systems Operational",
                "source": {
                  "type": "managed-status-source",
                  "cached": false,
                  "stale": false
                }
              }
            }
          },
          "routeTemplate": "/api/status/check",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "service"
                    ],
                    "properties": {
                      "service": {
                        "type": "string",
                        "description": "Service id from /api/status/catalog, for example github or gitlab."
                      },
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Official Service Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-check",
            "url": "https://agentbodega.store/api/status/check",
            "method": "POST",
            "description": "Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.",
            "longDescription": "Purpose: Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nBest use: Use this when an agent needs check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: service.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- service (required, string): Service id from /api/status/catalog, for example github or gitlab.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Official Service Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"service\": \"github\",\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Official Service Status Check",
            "category": "official-status",
            "kind": "utility",
            "tags": [
              "status",
              "github",
              "gitlab",
              "deploy-readiness",
              "incident-response",
              "agent-tools"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "service"
              ],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "service",
                  "type": "string",
                  "required": true,
                  "description": "Service id from /api/status/catalog, for example github or gitlab."
                },
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "service": "github",
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "service"
              ],
              "properties": {
                "service": {
                  "type": "string",
                  "description": "Service id from /api/status/catalog, for example github or gitlab."
                },
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Official Service Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/check",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/check",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "status-checks",
          "aisle": "Status Checks",
          "offeringId": "official-status-check",
          "offering": "Official Service Status Check",
          "pathIds": [
            "official-status",
            "status-checks",
            "official-status-check"
          ],
          "pathLabels": [
            "Status & Infra",
            "Status Checks",
            "Official Service Status Check"
          ],
          "taxonomyPath": "official-status.status-checks.official-status-check",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "status-checks",
              "name": "Status Checks"
            },
            "offering": {
              "id": "official-status-check",
              "name": "Official Service Status Check"
            },
            "pathIds": [
              "official-status",
              "status-checks",
              "official-status-check"
            ],
            "pathLabels": [
              "Status & Infra",
              "Status Checks",
              "Official Service Status Check"
            ]
          }
        },
        "description": {
          "short": "Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.",
          "full": "Purpose: Check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nBest use: Use this when an agent needs check one official status page or status API for GitHub, GitLab, deploy platforms, package registries, databases, auth, and AI APIs.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: service.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- service (required, string): Service id from /api/status/catalog, for example github or gitlab.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Official Service Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"service\": \"github\",\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "service"
          ],
          "properties": {
            "service": {
              "type": "string",
              "description": "Service id from /api/status/catalog, for example github or gitlab."
            },
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Official Service Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "service"
          ],
          "properties": {
            "service": {
              "type": "string",
              "description": "Service id from /api/status/catalog, for example github or gitlab."
            },
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Official Service Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "service"
          ],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "service",
              "type": "string",
              "required": true,
              "description": "Service id from /api/status/catalog, for example github or gitlab."
            },
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Official Service Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "service": "github",
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "service": "github",
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "id": "github",
            "name": "GitHub"
          },
          "ok": true,
          "status": "operational",
          "label": "All Systems Operational",
          "source": {
            "type": "managed-status-source",
            "cached": false,
            "stale": false
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/cloud/status/check",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cloud Provider Status Check",
      "description": "Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.",
      "longDescription": "Purpose: Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nBest use: Use this when an agent needs check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: provider.\nOptional fields: service, product, region, location, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (required, string): Cloud provider id. Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\".\n- service (optional, string): Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke.\n- product (optional, string): GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine.\n- region (optional, string): Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global.\n- location (optional, string): Provider location alias. Treated the same as region.\n- includeHistory (optional, boolean): Return recent/resolved historical incidents when the provider source exposes them. Constraints: default: false.\n- includeHealthy (optional, boolean): Include healthy/noisy rows. Default responses focus on degraded or relevant incidents. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"aws\",\n  \"service\": \"lambda\",\n  \"region\": \"us-east-1\",\n  \"includeHistory\": false\n}\n```",
      "category": "cloud-status",
      "kind": "utility",
      "departmentId": "cloud-status",
      "department": "Cloud Status",
      "aisleId": "provider-status",
      "aisle": "Provider Status",
      "shelfId": "single-unit",
      "shelf": "Single Unit",
      "offeringId": "cloud-status-check",
      "offering": "Cloud Provider Status Check",
      "pathIds": [
        "cloud-status",
        "provider-status",
        "single-unit",
        "cloud-status-check"
      ],
      "pathLabels": [
        "Cloud Status",
        "Provider Status",
        "Single Unit",
        "Cloud Provider Status Check"
      ],
      "taxonomyPath": "cloud-status.provider-status.single-unit.cloud-status-check",
      "layout": {
        "department": {
          "id": "cloud-status",
          "name": "Cloud Status"
        },
        "aisle": {
          "id": "provider-status",
          "name": "Provider Status"
        },
        "shelf": {
          "id": "single-unit",
          "name": "Single Unit"
        },
        "offering": {
          "id": "cloud-status-check",
          "name": "Cloud Provider Status Check"
        },
        "pathIds": [
          "cloud-status",
          "provider-status",
          "single-unit",
          "cloud-status-check"
        ],
        "pathLabels": [
          "Cloud Status",
          "Provider Status",
          "Single Unit",
          "Cloud Provider Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cloud",
        "aws",
        "gcp",
        "azure",
        "digitalocean",
        "linode",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "provider"
        ],
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode"
            ],
            "description": "Cloud provider id."
          },
          "service": {
            "type": "string",
            "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
          },
          "product": {
            "type": "string",
            "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
          },
          "region": {
            "type": "string",
            "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
          },
          "location": {
            "type": "string",
            "description": "Provider location alias. Treated the same as region."
          },
          "includeHistory": {
            "type": "boolean",
            "default": false,
            "description": "Return recent/resolved historical incidents when the provider source exposes them."
          },
          "includeHealthy": {
            "type": "boolean",
            "default": false,
            "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "provider"
        ],
        "optional": [
          "service",
          "product",
          "region",
          "location",
          "includeHistory",
          "includeHealthy",
          "incidentLimit"
        ],
        "fields": [
          {
            "name": "provider",
            "type": "string",
            "required": true,
            "description": "Cloud provider id.",
            "constraints": {
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode"
              ]
            }
          },
          {
            "name": "service",
            "type": "string",
            "required": false,
            "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
          },
          {
            "name": "product",
            "type": "string",
            "required": false,
            "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
          },
          {
            "name": "region",
            "type": "string",
            "required": false,
            "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
          },
          {
            "name": "location",
            "type": "string",
            "required": false,
            "description": "Provider location alias. Treated the same as region."
          },
          {
            "name": "includeHistory",
            "type": "boolean",
            "required": false,
            "description": "Return recent/resolved historical incidents when the provider source exposes them.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "includeHealthy",
            "type": "boolean",
            "required": false,
            "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "provider": "aws",
          "service": "lambda",
          "region": "us-east-1",
          "includeHistory": false
        }
      },
      "exampleRequest": {
        "provider": "aws",
        "service": "lambda",
        "region": "us-east-1",
        "includeHistory": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "provider": {
          "id": "aws",
          "name": "AWS"
        },
        "status": "operational",
        "summary": "No broad-impact incident matched the requested unit.",
        "incidents": []
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "provider": "aws",
                "service": "lambda",
                "region": "us-east-1",
                "includeHistory": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "provider": {
                  "id": "aws",
                  "name": "AWS"
                },
                "status": "operational",
                "summary": "No broad-impact incident matched the requested unit.",
                "incidents": []
              }
            }
          },
          "routeTemplate": "/api/cloud/status/check",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "provider"
                    ],
                    "properties": {
                      "provider": {
                        "type": "string",
                        "enum": [
                          "aws",
                          "gcp",
                          "azure",
                          "digitalocean",
                          "linode"
                        ],
                        "description": "Cloud provider id."
                      },
                      "service": {
                        "type": "string",
                        "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                      },
                      "product": {
                        "type": "string",
                        "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                      },
                      "region": {
                        "type": "string",
                        "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                      },
                      "location": {
                        "type": "string",
                        "description": "Provider location alias. Treated the same as region."
                      },
                      "includeHistory": {
                        "type": "boolean",
                        "default": false,
                        "description": "Return recent/resolved historical incidents when the provider source exposes them."
                      },
                      "includeHealthy": {
                        "type": "boolean",
                        "default": false,
                        "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "cloud-status-check",
            "url": "https://agentbodega.store/api/cloud/status/check",
            "method": "POST",
            "description": "Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.",
            "longDescription": "Purpose: Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nBest use: Use this when an agent needs check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: provider.\nOptional fields: service, product, region, location, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (required, string): Cloud provider id. Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\".\n- service (optional, string): Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke.\n- product (optional, string): GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine.\n- region (optional, string): Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global.\n- location (optional, string): Provider location alias. Treated the same as region.\n- includeHistory (optional, boolean): Return recent/resolved historical incidents when the provider source exposes them. Constraints: default: false.\n- includeHealthy (optional, boolean): Include healthy/noisy rows. Default responses focus on degraded or relevant incidents. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"aws\",\n  \"service\": \"lambda\",\n  \"region\": \"us-east-1\",\n  \"includeHistory\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cloud Provider Status Check",
            "category": "cloud-status",
            "kind": "utility",
            "tags": [
              "status",
              "cloud",
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "provider"
              ],
              "optional": [
                "service",
                "product",
                "region",
                "location",
                "includeHistory",
                "includeHealthy",
                "incidentLimit"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "string",
                  "required": true,
                  "description": "Cloud provider id.",
                  "constraints": {
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ]
                  }
                },
                {
                  "name": "service",
                  "type": "string",
                  "required": false,
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                {
                  "name": "product",
                  "type": "string",
                  "required": false,
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                {
                  "name": "region",
                  "type": "string",
                  "required": false,
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                {
                  "name": "location",
                  "type": "string",
                  "required": false,
                  "description": "Provider location alias. Treated the same as region."
                },
                {
                  "name": "includeHistory",
                  "type": "boolean",
                  "required": false,
                  "description": "Return recent/resolved historical incidents when the provider source exposes them.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "includeHealthy",
                  "type": "boolean",
                  "required": false,
                  "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "provider": "aws",
                "service": "lambda",
                "region": "us-east-1",
                "includeHistory": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "provider"
              ],
              "properties": {
                "provider": {
                  "type": "string",
                  "enum": [
                    "aws",
                    "gcp",
                    "azure",
                    "digitalocean",
                    "linode"
                  ],
                  "description": "Cloud provider id."
                },
                "service": {
                  "type": "string",
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                "product": {
                  "type": "string",
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                "region": {
                  "type": "string",
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                "location": {
                  "type": "string",
                  "description": "Provider location alias. Treated the same as region."
                },
                "includeHistory": {
                  "type": "boolean",
                  "default": false,
                  "description": "Return recent/resolved historical incidents when the provider source exposes them."
                },
                "includeHealthy": {
                  "type": "boolean",
                  "default": false,
                  "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/cloud/status/check",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/cloud/status/check",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "cloud-status",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "cloud-status",
          "department": "Cloud Status",
          "aisleId": "provider-status",
          "aisle": "Provider Status",
          "shelfId": "single-unit",
          "shelf": "Single Unit",
          "offeringId": "cloud-status-check",
          "offering": "Cloud Provider Status Check",
          "pathIds": [
            "cloud-status",
            "provider-status",
            "single-unit",
            "cloud-status-check"
          ],
          "pathLabels": [
            "Cloud Status",
            "Provider Status",
            "Single Unit",
            "Cloud Provider Status Check"
          ],
          "taxonomyPath": "cloud-status.provider-status.single-unit.cloud-status-check",
          "layout": {
            "department": {
              "id": "cloud-status",
              "name": "Cloud Status"
            },
            "aisle": {
              "id": "provider-status",
              "name": "Provider Status"
            },
            "shelf": {
              "id": "single-unit",
              "name": "Single Unit"
            },
            "offering": {
              "id": "cloud-status-check",
              "name": "Cloud Provider Status Check"
            },
            "pathIds": [
              "cloud-status",
              "provider-status",
              "single-unit",
              "cloud-status-check"
            ],
            "pathLabels": [
              "Cloud Status",
              "Provider Status",
              "Single Unit",
              "Cloud Provider Status Check"
            ]
          }
        },
        "description": {
          "short": "Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.",
          "full": "Purpose: Check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nBest use: Use this when an agent needs check one public AWS, Google Cloud, Azure, DigitalOcean, or Linode service/location status source and return a terse agent-ready verdict.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: provider.\nOptional fields: service, product, region, location, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (required, string): Cloud provider id. Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\".\n- service (optional, string): Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke.\n- product (optional, string): GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine.\n- region (optional, string): Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global.\n- location (optional, string): Provider location alias. Treated the same as region.\n- includeHistory (optional, boolean): Return recent/resolved historical incidents when the provider source exposes them. Constraints: default: false.\n- includeHealthy (optional, boolean): Include healthy/noisy rows. Default responses focus on degraded or relevant incidents. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"aws\",\n  \"service\": \"lambda\",\n  \"region\": \"us-east-1\",\n  \"includeHistory\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "provider"
          ],
          "properties": {
            "provider": {
              "type": "string",
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode"
              ],
              "description": "Cloud provider id."
            },
            "service": {
              "type": "string",
              "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
            },
            "product": {
              "type": "string",
              "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
            },
            "region": {
              "type": "string",
              "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
            },
            "location": {
              "type": "string",
              "description": "Provider location alias. Treated the same as region."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Return recent/resolved historical incidents when the provider source exposes them."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "provider"
          ],
          "properties": {
            "provider": {
              "type": "string",
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode"
              ],
              "description": "Cloud provider id."
            },
            "service": {
              "type": "string",
              "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
            },
            "product": {
              "type": "string",
              "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
            },
            "region": {
              "type": "string",
              "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
            },
            "location": {
              "type": "string",
              "description": "Provider location alias. Treated the same as region."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Return recent/resolved historical incidents when the provider source exposes them."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "provider"
          ],
          "optional": [
            "service",
            "product",
            "region",
            "location",
            "includeHistory",
            "includeHealthy",
            "incidentLimit"
          ],
          "fields": [
            {
              "name": "provider",
              "type": "string",
              "required": true,
              "description": "Cloud provider id.",
              "constraints": {
                "enum": [
                  "aws",
                  "gcp",
                  "azure",
                  "digitalocean",
                  "linode"
                ]
              }
            },
            {
              "name": "service",
              "type": "string",
              "required": false,
              "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
            },
            {
              "name": "product",
              "type": "string",
              "required": false,
              "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
            },
            {
              "name": "region",
              "type": "string",
              "required": false,
              "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
            },
            {
              "name": "location",
              "type": "string",
              "required": false,
              "description": "Provider location alias. Treated the same as region."
            },
            {
              "name": "includeHistory",
              "type": "boolean",
              "required": false,
              "description": "Return recent/resolved historical incidents when the provider source exposes them.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "includeHealthy",
              "type": "boolean",
              "required": false,
              "description": "Include healthy/noisy rows. Default responses focus on degraded or relevant incidents.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Incident Limit numeric value for Cloud Provider Status Check. Constraints: default: 5; min: 1; max: 20.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "provider": "aws",
            "service": "lambda",
            "region": "us-east-1",
            "includeHistory": false
          }
        },
        "exampleRequest": {
          "provider": "aws",
          "service": "lambda",
          "region": "us-east-1",
          "includeHistory": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "provider": {
            "id": "aws",
            "name": "AWS"
          },
          "status": "operational",
          "summary": "No broad-impact incident matched the requested unit.",
          "incidents": []
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/cloud/status/summary",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cloud Provider Status Summary",
      "description": "Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.",
      "longDescription": "Purpose: Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nBest use: Use this when an agent needs summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: provider, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (optional, string): Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"all\",\n  \"includeHistory\": false\n}\n```",
      "category": "cloud-status",
      "kind": "http-json",
      "departmentId": "cloud-status",
      "department": "Cloud Status",
      "aisleId": "incident-summaries",
      "aisle": "Incident Summaries",
      "shelfId": "single-unit",
      "shelf": "Single Unit",
      "offeringId": "cloud-status-summary",
      "offering": "Cloud Provider Status Summary",
      "pathIds": [
        "cloud-status",
        "incident-summaries",
        "single-unit",
        "cloud-status-summary"
      ],
      "pathLabels": [
        "Cloud Status",
        "Incident Summaries",
        "Single Unit",
        "Cloud Provider Status Summary"
      ],
      "taxonomyPath": "cloud-status.incident-summaries.single-unit.cloud-status-summary",
      "layout": {
        "department": {
          "id": "cloud-status",
          "name": "Cloud Status"
        },
        "aisle": {
          "id": "incident-summaries",
          "name": "Incident Summaries"
        },
        "shelf": {
          "id": "single-unit",
          "name": "Single Unit"
        },
        "offering": {
          "id": "cloud-status-summary",
          "name": "Cloud Provider Status Summary"
        },
        "pathIds": [
          "cloud-status",
          "incident-summaries",
          "single-unit",
          "cloud-status-summary"
        ],
        "pathLabels": [
          "Cloud Status",
          "Incident Summaries",
          "Single Unit",
          "Cloud Provider Status Summary"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cloud",
        "summary",
        "aws",
        "gcp",
        "azure",
        "digitalocean",
        "linode",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode",
              "all"
            ],
            "default": "all",
            "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\"."
          },
          "includeHistory": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false."
          },
          "includeHealthy": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "provider",
          "includeHistory",
          "includeHealthy",
          "incidentLimit"
        ],
        "fields": [
          {
            "name": "provider",
            "type": "string",
            "required": false,
            "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".",
            "constraints": {
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode",
                "all"
              ],
              "default": "all"
            }
          },
          {
            "name": "includeHistory",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "includeHealthy",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "provider": "all",
          "includeHistory": false
        }
      },
      "exampleRequest": {
        "provider": "all",
        "includeHistory": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "provider": "all",
        "summary": {
          "worstStatus": "operational",
          "checkedProviders": 5
        },
        "incidents": []
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "provider": "all",
                "includeHistory": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "provider": "all",
                "summary": {
                  "worstStatus": "operational",
                  "checkedProviders": 5
                },
                "incidents": []
              }
            }
          },
          "routeTemplate": "/api/cloud/status/summary",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "provider": {
                        "type": "string",
                        "enum": [
                          "aws",
                          "gcp",
                          "azure",
                          "digitalocean",
                          "linode",
                          "all"
                        ],
                        "default": "all",
                        "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\"."
                      },
                      "includeHistory": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false."
                      },
                      "includeHealthy": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "cloud-status-summary",
            "url": "https://agentbodega.store/api/cloud/status/summary",
            "method": "POST",
            "description": "Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.",
            "longDescription": "Purpose: Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nBest use: Use this when an agent needs summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: provider, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (optional, string): Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"all\",\n  \"includeHistory\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cloud Provider Status Summary",
            "category": "cloud-status",
            "kind": "http-json",
            "tags": [
              "status",
              "cloud",
              "summary",
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "provider",
                "includeHistory",
                "includeHealthy",
                "incidentLimit"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "string",
                  "required": false,
                  "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".",
                  "constraints": {
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode",
                      "all"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "includeHistory",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "includeHealthy",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "provider": "all",
                "includeHistory": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "provider": {
                  "type": "string",
                  "enum": [
                    "aws",
                    "gcp",
                    "azure",
                    "digitalocean",
                    "linode",
                    "all"
                  ],
                  "default": "all",
                  "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\"."
                },
                "includeHistory": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false."
                },
                "includeHealthy": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/cloud/status/summary",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/cloud/status/summary",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "cloud-status",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "cloud-status",
          "department": "Cloud Status",
          "aisleId": "incident-summaries",
          "aisle": "Incident Summaries",
          "shelfId": "single-unit",
          "shelf": "Single Unit",
          "offeringId": "cloud-status-summary",
          "offering": "Cloud Provider Status Summary",
          "pathIds": [
            "cloud-status",
            "incident-summaries",
            "single-unit",
            "cloud-status-summary"
          ],
          "pathLabels": [
            "Cloud Status",
            "Incident Summaries",
            "Single Unit",
            "Cloud Provider Status Summary"
          ],
          "taxonomyPath": "cloud-status.incident-summaries.single-unit.cloud-status-summary",
          "layout": {
            "department": {
              "id": "cloud-status",
              "name": "Cloud Status"
            },
            "aisle": {
              "id": "incident-summaries",
              "name": "Incident Summaries"
            },
            "shelf": {
              "id": "single-unit",
              "name": "Single Unit"
            },
            "offering": {
              "id": "cloud-status-summary",
              "name": "Cloud Provider Status Summary"
            },
            "pathIds": [
              "cloud-status",
              "incident-summaries",
              "single-unit",
              "cloud-status-summary"
            ],
            "pathLabels": [
              "Cloud Status",
              "Incident Summaries",
              "Single Unit",
              "Cloud Provider Status Summary"
            ]
          }
        },
        "description": {
          "short": "Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.",
          "full": "Purpose: Summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nBest use: Use this when an agent needs summarize public broad-impact incidents for AWS, Google Cloud, Azure, DigitalOcean, Linode, or all providers before an agent retries cloud work.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: provider, includeHistory, includeHealthy, incidentLimit.\n\nAccepted fields:\n- provider (optional, string): Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false. Constraints: default: false.\n- incidentLimit (optional, integer): Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20. Constraints: default: 5; min: 1; max: 20.\n\nExample request body:\n```json\n{\n  \"provider\": \"all\",\n  \"includeHistory\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "provider": {
              "type": "string",
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode",
                "all"
              ],
              "default": "all",
              "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\"."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "provider": {
              "type": "string",
              "enum": [
                "aws",
                "gcp",
                "azure",
                "digitalocean",
                "linode",
                "all"
              ],
              "default": "all",
              "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\"."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "provider",
            "includeHistory",
            "includeHealthy",
            "incidentLimit"
          ],
          "fields": [
            {
              "name": "provider",
              "type": "string",
              "required": false,
              "description": "Provider filter for Cloud Provider Status Summary. Accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\". Constraints: accepted values: \"aws\", \"gcp\", \"azure\", \"digitalocean\", \"linode\", \"all\"; default: \"all\".",
              "constraints": {
                "enum": [
                  "aws",
                  "gcp",
                  "azure",
                  "digitalocean",
                  "linode",
                  "all"
                ],
                "default": "all"
              }
            },
            {
              "name": "includeHistory",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include history behavior for Cloud Provider Status Summary. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "includeHealthy",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include healthy behavior for Cloud Provider Status Summary. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Incident Limit numeric value for Cloud Provider Status Summary. Constraints: default: 5; min: 1; max: 20.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "provider": "all",
            "includeHistory": false
          }
        },
        "exampleRequest": {
          "provider": "all",
          "includeHistory": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "provider": "all",
          "summary": {
            "worstStatus": "operational",
            "checkedProviders": 5
          },
          "incidents": []
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/cloud/status/bundle",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cloud Status Small Bundle",
      "description": "Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.",
      "longDescription": "Purpose: Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nBest use: Use this when an agent needs check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, targets, includeHistory, includeHealthy.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".\n- targets (optional, array): Optional explicit cloud checks. Bundle price covers up to five normalized units. Constraints: min items: 1; max items: 5. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"cloud-core\",\n  \"includeHistory\": false\n}\n```",
      "category": "cloud-status",
      "kind": "utility",
      "departmentId": "cloud-status",
      "department": "Cloud Status",
      "aisleId": "cloud-bundles",
      "aisle": "Cloud Bundles",
      "shelfId": "multi-unit",
      "shelf": "Multi Unit",
      "offeringId": "cloud-status-bundle",
      "offering": "Cloud Status Small Bundle",
      "pathIds": [
        "cloud-status",
        "cloud-bundles",
        "multi-unit",
        "cloud-status-bundle"
      ],
      "pathLabels": [
        "Cloud Status",
        "Cloud Bundles",
        "Multi Unit",
        "Cloud Status Small Bundle"
      ],
      "taxonomyPath": "cloud-status.cloud-bundles.multi-unit.cloud-status-bundle",
      "layout": {
        "department": {
          "id": "cloud-status",
          "name": "Cloud Status"
        },
        "aisle": {
          "id": "cloud-bundles",
          "name": "Cloud Bundles"
        },
        "shelf": {
          "id": "multi-unit",
          "name": "Multi Unit"
        },
        "offering": {
          "id": "cloud-status-bundle",
          "name": "Cloud Status Small Bundle"
        },
        "pathIds": [
          "cloud-status",
          "cloud-bundles",
          "multi-unit",
          "cloud-status-bundle"
        ],
        "pathLabels": [
          "Cloud Status",
          "Cloud Bundles",
          "Multi Unit",
          "Cloud Status Small Bundle"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cloud",
        "bundle",
        "aws",
        "gcp",
        "azure",
        "digitalocean",
        "linode",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "bundle": {
            "type": "string",
            "enum": [
              "cloud-core",
              "aws-webapp",
              "gcp-ai-app",
              "azure-saas",
              "do-core",
              "linode-core"
            ],
            "default": "cloud-core",
            "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\"."
          },
          "targets": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "provider"
              ],
              "properties": {
                "provider": {
                  "type": "string",
                  "enum": [
                    "aws",
                    "gcp",
                    "azure",
                    "digitalocean",
                    "linode"
                  ],
                  "description": "Cloud provider id."
                },
                "service": {
                  "type": "string",
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                "product": {
                  "type": "string",
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                "region": {
                  "type": "string",
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                "location": {
                  "type": "string",
                  "description": "Provider location alias. Treated the same as region."
                }
              },
              "additionalProperties": false,
              "description": "Targets item object for configuring Cloud Status Small Bundle."
            },
            "minItems": 1,
            "maxItems": 5,
            "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units."
          },
          "includeHistory": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false."
          },
          "includeHealthy": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "bundle",
          "targets",
          "includeHistory",
          "includeHealthy"
        ],
        "fields": [
          {
            "name": "bundle",
            "type": "string",
            "required": false,
            "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".",
            "constraints": {
              "enum": [
                "cloud-core",
                "aws-webapp",
                "gcp-ai-app",
                "azure-saas",
                "do-core",
                "linode-core"
              ],
              "default": "cloud-core"
            }
          },
          {
            "name": "targets",
            "type": "array",
            "required": false,
            "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units.",
            "constraints": {
              "minItems": 1,
              "maxItems": 5
            },
            "items": {
              "type": "object",
              "required": [
                "provider"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "string",
                  "required": true,
                  "description": "Cloud provider id.",
                  "constraints": {
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ]
                  }
                },
                {
                  "name": "service",
                  "type": "string",
                  "required": false,
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                {
                  "name": "product",
                  "type": "string",
                  "required": false,
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                {
                  "name": "region",
                  "type": "string",
                  "required": false,
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                {
                  "name": "location",
                  "type": "string",
                  "required": false,
                  "description": "Provider location alias. Treated the same as region."
                }
              ]
            }
          },
          {
            "name": "includeHistory",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "includeHealthy",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "bundle": "cloud-core",
          "includeHistory": false
        }
      },
      "exampleRequest": {
        "bundle": "cloud-core",
        "includeHistory": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "bundle": {
          "id": "cloud-core",
          "units": 4
        },
        "summary": {
          "worstStatus": "operational",
          "degraded": 0
        },
        "results": []
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "bundle": "cloud-core",
                "includeHistory": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "bundle": {
                  "id": "cloud-core",
                  "units": 4
                },
                "summary": {
                  "worstStatus": "operational",
                  "degraded": 0
                },
                "results": []
              }
            }
          },
          "routeTemplate": "/api/cloud/status/bundle",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "bundle": {
                        "type": "string",
                        "enum": [
                          "cloud-core",
                          "aws-webapp",
                          "gcp-ai-app",
                          "azure-saas",
                          "do-core",
                          "linode-core"
                        ],
                        "default": "cloud-core",
                        "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\"."
                      },
                      "targets": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "provider"
                          ],
                          "properties": {
                            "provider": {
                              "type": "string",
                              "enum": [
                                "aws",
                                "gcp",
                                "azure",
                                "digitalocean",
                                "linode"
                              ],
                              "description": "Cloud provider id."
                            },
                            "service": {
                              "type": "string",
                              "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                            },
                            "product": {
                              "type": "string",
                              "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                            },
                            "region": {
                              "type": "string",
                              "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                            },
                            "location": {
                              "type": "string",
                              "description": "Provider location alias. Treated the same as region."
                            }
                          },
                          "additionalProperties": false,
                          "description": "Targets item object for configuring Cloud Status Small Bundle."
                        },
                        "minItems": 1,
                        "maxItems": 5,
                        "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units."
                      },
                      "includeHistory": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false."
                      },
                      "includeHealthy": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "cloud-status-bundle",
            "url": "https://agentbodega.store/api/cloud/status/bundle",
            "method": "POST",
            "description": "Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.",
            "longDescription": "Purpose: Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nBest use: Use this when an agent needs check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, targets, includeHistory, includeHealthy.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".\n- targets (optional, array): Optional explicit cloud checks. Bundle price covers up to five normalized units. Constraints: min items: 1; max items: 5. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"cloud-core\",\n  \"includeHistory\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cloud Status Small Bundle",
            "category": "cloud-status",
            "kind": "utility",
            "tags": [
              "status",
              "cloud",
              "bundle",
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "bundle",
                "targets",
                "includeHistory",
                "includeHealthy"
              ],
              "fields": [
                {
                  "name": "bundle",
                  "type": "string",
                  "required": false,
                  "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".",
                  "constraints": {
                    "enum": [
                      "cloud-core",
                      "aws-webapp",
                      "gcp-ai-app",
                      "azure-saas",
                      "do-core",
                      "linode-core"
                    ],
                    "default": "cloud-core"
                  }
                },
                {
                  "name": "targets",
                  "type": "array",
                  "required": false,
                  "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units.",
                  "constraints": {
                    "minItems": 1,
                    "maxItems": 5
                  },
                  "items": {
                    "type": "object",
                    "required": [
                      "provider"
                    ],
                    "fields": [
                      {
                        "name": "provider",
                        "type": "string",
                        "required": true,
                        "description": "Cloud provider id.",
                        "constraints": {
                          "enum": [
                            "aws",
                            "gcp",
                            "azure",
                            "digitalocean",
                            "linode"
                          ]
                        }
                      },
                      {
                        "name": "service",
                        "type": "string",
                        "required": false,
                        "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                      },
                      {
                        "name": "product",
                        "type": "string",
                        "required": false,
                        "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                      },
                      {
                        "name": "region",
                        "type": "string",
                        "required": false,
                        "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                      },
                      {
                        "name": "location",
                        "type": "string",
                        "required": false,
                        "description": "Provider location alias. Treated the same as region."
                      }
                    ]
                  }
                },
                {
                  "name": "includeHistory",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "includeHealthy",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "bundle": "cloud-core",
                "includeHistory": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "bundle": {
                  "type": "string",
                  "enum": [
                    "cloud-core",
                    "aws-webapp",
                    "gcp-ai-app",
                    "azure-saas",
                    "do-core",
                    "linode-core"
                  ],
                  "default": "cloud-core",
                  "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\"."
                },
                "targets": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "provider"
                    ],
                    "properties": {
                      "provider": {
                        "type": "string",
                        "enum": [
                          "aws",
                          "gcp",
                          "azure",
                          "digitalocean",
                          "linode"
                        ],
                        "description": "Cloud provider id."
                      },
                      "service": {
                        "type": "string",
                        "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                      },
                      "product": {
                        "type": "string",
                        "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                      },
                      "region": {
                        "type": "string",
                        "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                      },
                      "location": {
                        "type": "string",
                        "description": "Provider location alias. Treated the same as region."
                      }
                    },
                    "additionalProperties": false,
                    "description": "Targets item object for configuring Cloud Status Small Bundle."
                  },
                  "minItems": 1,
                  "maxItems": 5,
                  "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units."
                },
                "includeHistory": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false."
                },
                "includeHealthy": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/cloud/status/bundle",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/cloud/status/bundle",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "cloud-status",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "cloud-status",
          "department": "Cloud Status",
          "aisleId": "cloud-bundles",
          "aisle": "Cloud Bundles",
          "shelfId": "multi-unit",
          "shelf": "Multi Unit",
          "offeringId": "cloud-status-bundle",
          "offering": "Cloud Status Small Bundle",
          "pathIds": [
            "cloud-status",
            "cloud-bundles",
            "multi-unit",
            "cloud-status-bundle"
          ],
          "pathLabels": [
            "Cloud Status",
            "Cloud Bundles",
            "Multi Unit",
            "Cloud Status Small Bundle"
          ],
          "taxonomyPath": "cloud-status.cloud-bundles.multi-unit.cloud-status-bundle",
          "layout": {
            "department": {
              "id": "cloud-status",
              "name": "Cloud Status"
            },
            "aisle": {
              "id": "cloud-bundles",
              "name": "Cloud Bundles"
            },
            "shelf": {
              "id": "multi-unit",
              "name": "Multi Unit"
            },
            "offering": {
              "id": "cloud-status-bundle",
              "name": "Cloud Status Small Bundle"
            },
            "pathIds": [
              "cloud-status",
              "cloud-bundles",
              "multi-unit",
              "cloud-status-bundle"
            ],
            "pathLabels": [
              "Cloud Status",
              "Cloud Bundles",
              "Multi Unit",
              "Cloud Status Small Bundle"
            ]
          }
        },
        "description": {
          "short": "Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.",
          "full": "Purpose: Check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nBest use: Use this when an agent needs check up to five cloud service/location units, or a curated cloud-provider bundle, without dumping every healthy cloud service.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, targets, includeHistory, includeHealthy.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".\n- targets (optional, array): Optional explicit cloud checks. Bundle price covers up to five normalized units. Constraints: min items: 1; max items: 5. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"cloud-core\",\n  \"includeHistory\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "bundle": {
              "type": "string",
              "enum": [
                "cloud-core",
                "aws-webapp",
                "gcp-ai-app",
                "azure-saas",
                "do-core",
                "linode-core"
              ],
              "default": "cloud-core",
              "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\"."
            },
            "targets": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "properties": {
                  "provider": {
                    "type": "string",
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ],
                    "description": "Cloud provider id."
                  },
                  "service": {
                    "type": "string",
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  "product": {
                    "type": "string",
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  "region": {
                    "type": "string",
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  "location": {
                    "type": "string",
                    "description": "Provider location alias. Treated the same as region."
                  }
                },
                "additionalProperties": false,
                "description": "Targets item object for configuring Cloud Status Small Bundle."
              },
              "minItems": 1,
              "maxItems": 5,
              "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "bundle": {
              "type": "string",
              "enum": [
                "cloud-core",
                "aws-webapp",
                "gcp-ai-app",
                "azure-saas",
                "do-core",
                "linode-core"
              ],
              "default": "cloud-core",
              "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\"."
            },
            "targets": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "properties": {
                  "provider": {
                    "type": "string",
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ],
                    "description": "Cloud provider id."
                  },
                  "service": {
                    "type": "string",
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  "product": {
                    "type": "string",
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  "region": {
                    "type": "string",
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  "location": {
                    "type": "string",
                    "description": "Provider location alias. Treated the same as region."
                  }
                },
                "additionalProperties": false,
                "description": "Targets item object for configuring Cloud Status Small Bundle."
              },
              "minItems": 1,
              "maxItems": 5,
              "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "bundle",
            "targets",
            "includeHistory",
            "includeHealthy"
          ],
          "fields": [
            {
              "name": "bundle",
              "type": "string",
              "required": false,
              "description": "Bundle filter for Cloud Status Small Bundle. Accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\". Constraints: accepted values: \"cloud-core\", \"aws-webapp\", \"gcp-ai-app\", \"azure-saas\", \"do-core\", \"linode-core\"; default: \"cloud-core\".",
              "constraints": {
                "enum": [
                  "cloud-core",
                  "aws-webapp",
                  "gcp-ai-app",
                  "azure-saas",
                  "do-core",
                  "linode-core"
                ],
                "default": "cloud-core"
              }
            },
            {
              "name": "targets",
              "type": "array",
              "required": false,
              "description": "Optional explicit cloud checks. Bundle price covers up to five normalized units.",
              "constraints": {
                "minItems": 1,
                "maxItems": 5
              },
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "fields": [
                  {
                    "name": "provider",
                    "type": "string",
                    "required": true,
                    "description": "Cloud provider id.",
                    "constraints": {
                      "enum": [
                        "aws",
                        "gcp",
                        "azure",
                        "digitalocean",
                        "linode"
                      ]
                    }
                  },
                  {
                    "name": "service",
                    "type": "string",
                    "required": false,
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  {
                    "name": "product",
                    "type": "string",
                    "required": false,
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  {
                    "name": "region",
                    "type": "string",
                    "required": false,
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  {
                    "name": "location",
                    "type": "string",
                    "required": false,
                    "description": "Provider location alias. Treated the same as region."
                  }
                ]
              }
            },
            {
              "name": "includeHistory",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include history behavior for Cloud Status Small Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "includeHealthy",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include healthy behavior for Cloud Status Small Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "bundle": "cloud-core",
            "includeHistory": false
          }
        },
        "exampleRequest": {
          "bundle": "cloud-core",
          "includeHistory": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "bundle": {
            "id": "cloud-core",
            "units": 4
          },
          "summary": {
            "worstStatus": "operational",
            "degraded": 0
          },
          "results": []
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/cloud/status/stack",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cloud Stack Status Bundle",
      "description": "Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.",
      "longDescription": "Purpose: Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nBest use: Use this when an agent needs check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: targets.\nOptional fields: includeHistory, includeHealthy.\n\nAccepted fields:\n- targets (required, array): Caller-selected cloud checks. Stack price covers up to twelve normalized units. Constraints: min items: 3; max items: 12. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"targets\": [\n    {\n      \"provider\": \"aws\",\n      \"service\": \"lambda\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"aws\",\n      \"service\": \"s3\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"gcp\",\n      \"product\": \"cloud-run\",\n      \"location\": \"us-central1\"\n    },\n    {\n      \"provider\": \"azure\",\n      \"service\": \"app-service\",\n      \"region\": \"eastus\"\n    }\n  ],\n  \"includeHistory\": false\n}\n```",
      "category": "cloud-status",
      "kind": "http-json",
      "departmentId": "cloud-status",
      "department": "Cloud Status",
      "aisleId": "cloud-bundles",
      "aisle": "Cloud Bundles",
      "shelfId": "multi-unit",
      "shelf": "Multi Unit",
      "offeringId": "cloud-status-stack",
      "offering": "Cloud Stack Status Bundle",
      "pathIds": [
        "cloud-status",
        "cloud-bundles",
        "multi-unit",
        "cloud-status-stack"
      ],
      "pathLabels": [
        "Cloud Status",
        "Cloud Bundles",
        "Multi Unit",
        "Cloud Stack Status Bundle"
      ],
      "taxonomyPath": "cloud-status.cloud-bundles.multi-unit.cloud-status-stack",
      "layout": {
        "department": {
          "id": "cloud-status",
          "name": "Cloud Status"
        },
        "aisle": {
          "id": "cloud-bundles",
          "name": "Cloud Bundles"
        },
        "shelf": {
          "id": "multi-unit",
          "name": "Multi Unit"
        },
        "offering": {
          "id": "cloud-status-stack",
          "name": "Cloud Stack Status Bundle"
        },
        "pathIds": [
          "cloud-status",
          "cloud-bundles",
          "multi-unit",
          "cloud-status-stack"
        ],
        "pathLabels": [
          "Cloud Status",
          "Cloud Bundles",
          "Multi Unit",
          "Cloud Stack Status Bundle"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cloud",
        "custom-stack",
        "aws",
        "gcp",
        "azure",
        "digitalocean",
        "linode",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "targets"
        ],
        "properties": {
          "targets": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "provider"
              ],
              "properties": {
                "provider": {
                  "type": "string",
                  "enum": [
                    "aws",
                    "gcp",
                    "azure",
                    "digitalocean",
                    "linode"
                  ],
                  "description": "Cloud provider id."
                },
                "service": {
                  "type": "string",
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                "product": {
                  "type": "string",
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                "region": {
                  "type": "string",
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                "location": {
                  "type": "string",
                  "description": "Provider location alias. Treated the same as region."
                }
              },
              "additionalProperties": false,
              "description": "Targets item object for configuring Cloud Stack Status Bundle."
            },
            "minItems": 3,
            "maxItems": 12,
            "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units."
          },
          "includeHistory": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false."
          },
          "includeHealthy": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "targets"
        ],
        "optional": [
          "includeHistory",
          "includeHealthy"
        ],
        "fields": [
          {
            "name": "targets",
            "type": "array",
            "required": true,
            "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units.",
            "constraints": {
              "minItems": 3,
              "maxItems": 12
            },
            "items": {
              "type": "object",
              "required": [
                "provider"
              ],
              "fields": [
                {
                  "name": "provider",
                  "type": "string",
                  "required": true,
                  "description": "Cloud provider id.",
                  "constraints": {
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ]
                  }
                },
                {
                  "name": "service",
                  "type": "string",
                  "required": false,
                  "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                },
                {
                  "name": "product",
                  "type": "string",
                  "required": false,
                  "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                },
                {
                  "name": "region",
                  "type": "string",
                  "required": false,
                  "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                },
                {
                  "name": "location",
                  "type": "string",
                  "required": false,
                  "description": "Provider location alias. Treated the same as region."
                }
              ]
            }
          },
          {
            "name": "includeHistory",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "includeHealthy",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "targets": [
            {
              "provider": "aws",
              "service": "lambda",
              "region": "us-east-1"
            },
            {
              "provider": "aws",
              "service": "s3",
              "region": "us-east-1"
            },
            {
              "provider": "gcp",
              "product": "cloud-run",
              "location": "us-central1"
            },
            {
              "provider": "azure",
              "service": "app-service",
              "region": "eastus"
            }
          ],
          "includeHistory": false
        }
      },
      "exampleRequest": {
        "targets": [
          {
            "provider": "aws",
            "service": "lambda",
            "region": "us-east-1"
          },
          {
            "provider": "aws",
            "service": "s3",
            "region": "us-east-1"
          },
          {
            "provider": "gcp",
            "product": "cloud-run",
            "location": "us-central1"
          },
          {
            "provider": "azure",
            "service": "app-service",
            "region": "eastus"
          }
        ],
        "includeHistory": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "bundle": {
          "id": "custom-stack",
          "units": 5
        },
        "summary": {
          "worstStatus": "operational",
          "degraded": 0
        },
        "results": []
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "targets": [
                  {
                    "provider": "aws",
                    "service": "lambda",
                    "region": "us-east-1"
                  },
                  {
                    "provider": "aws",
                    "service": "s3",
                    "region": "us-east-1"
                  },
                  {
                    "provider": "gcp",
                    "product": "cloud-run",
                    "location": "us-central1"
                  },
                  {
                    "provider": "azure",
                    "service": "app-service",
                    "region": "eastus"
                  }
                ],
                "includeHistory": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "bundle": {
                  "id": "custom-stack",
                  "units": 5
                },
                "summary": {
                  "worstStatus": "operational",
                  "degraded": 0
                },
                "results": []
              }
            }
          },
          "routeTemplate": "/api/cloud/status/stack",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "targets"
                    ],
                    "properties": {
                      "targets": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "provider"
                          ],
                          "properties": {
                            "provider": {
                              "type": "string",
                              "enum": [
                                "aws",
                                "gcp",
                                "azure",
                                "digitalocean",
                                "linode"
                              ],
                              "description": "Cloud provider id."
                            },
                            "service": {
                              "type": "string",
                              "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                            },
                            "product": {
                              "type": "string",
                              "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                            },
                            "region": {
                              "type": "string",
                              "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                            },
                            "location": {
                              "type": "string",
                              "description": "Provider location alias. Treated the same as region."
                            }
                          },
                          "additionalProperties": false,
                          "description": "Targets item object for configuring Cloud Stack Status Bundle."
                        },
                        "minItems": 3,
                        "maxItems": 12,
                        "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units."
                      },
                      "includeHistory": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false."
                      },
                      "includeHealthy": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "cloud-status-stack",
            "url": "https://agentbodega.store/api/cloud/status/stack",
            "method": "POST",
            "description": "Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.",
            "longDescription": "Purpose: Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nBest use: Use this when an agent needs check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: targets.\nOptional fields: includeHistory, includeHealthy.\n\nAccepted fields:\n- targets (required, array): Caller-selected cloud checks. Stack price covers up to twelve normalized units. Constraints: min items: 3; max items: 12. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"targets\": [\n    {\n      \"provider\": \"aws\",\n      \"service\": \"lambda\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"aws\",\n      \"service\": \"s3\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"gcp\",\n      \"product\": \"cloud-run\",\n      \"location\": \"us-central1\"\n    },\n    {\n      \"provider\": \"azure\",\n      \"service\": \"app-service\",\n      \"region\": \"eastus\"\n    }\n  ],\n  \"includeHistory\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cloud Stack Status Bundle",
            "category": "cloud-status",
            "kind": "http-json",
            "tags": [
              "status",
              "cloud",
              "custom-stack",
              "aws",
              "gcp",
              "azure",
              "digitalocean",
              "linode",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "targets"
              ],
              "optional": [
                "includeHistory",
                "includeHealthy"
              ],
              "fields": [
                {
                  "name": "targets",
                  "type": "array",
                  "required": true,
                  "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units.",
                  "constraints": {
                    "minItems": 3,
                    "maxItems": 12
                  },
                  "items": {
                    "type": "object",
                    "required": [
                      "provider"
                    ],
                    "fields": [
                      {
                        "name": "provider",
                        "type": "string",
                        "required": true,
                        "description": "Cloud provider id.",
                        "constraints": {
                          "enum": [
                            "aws",
                            "gcp",
                            "azure",
                            "digitalocean",
                            "linode"
                          ]
                        }
                      },
                      {
                        "name": "service",
                        "type": "string",
                        "required": false,
                        "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                      },
                      {
                        "name": "product",
                        "type": "string",
                        "required": false,
                        "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                      },
                      {
                        "name": "region",
                        "type": "string",
                        "required": false,
                        "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                      },
                      {
                        "name": "location",
                        "type": "string",
                        "required": false,
                        "description": "Provider location alias. Treated the same as region."
                      }
                    ]
                  }
                },
                {
                  "name": "includeHistory",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "includeHealthy",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "targets": [
                  {
                    "provider": "aws",
                    "service": "lambda",
                    "region": "us-east-1"
                  },
                  {
                    "provider": "aws",
                    "service": "s3",
                    "region": "us-east-1"
                  },
                  {
                    "provider": "gcp",
                    "product": "cloud-run",
                    "location": "us-central1"
                  },
                  {
                    "provider": "azure",
                    "service": "app-service",
                    "region": "eastus"
                  }
                ],
                "includeHistory": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "targets"
              ],
              "properties": {
                "targets": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "provider"
                    ],
                    "properties": {
                      "provider": {
                        "type": "string",
                        "enum": [
                          "aws",
                          "gcp",
                          "azure",
                          "digitalocean",
                          "linode"
                        ],
                        "description": "Cloud provider id."
                      },
                      "service": {
                        "type": "string",
                        "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                      },
                      "product": {
                        "type": "string",
                        "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                      },
                      "region": {
                        "type": "string",
                        "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                      },
                      "location": {
                        "type": "string",
                        "description": "Provider location alias. Treated the same as region."
                      }
                    },
                    "additionalProperties": false,
                    "description": "Targets item object for configuring Cloud Stack Status Bundle."
                  },
                  "minItems": 3,
                  "maxItems": 12,
                  "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units."
                },
                "includeHistory": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false."
                },
                "includeHealthy": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/cloud/status/stack",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/cloud/status/stack",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "cloud-status",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "cloud-status",
          "department": "Cloud Status",
          "aisleId": "cloud-bundles",
          "aisle": "Cloud Bundles",
          "shelfId": "multi-unit",
          "shelf": "Multi Unit",
          "offeringId": "cloud-status-stack",
          "offering": "Cloud Stack Status Bundle",
          "pathIds": [
            "cloud-status",
            "cloud-bundles",
            "multi-unit",
            "cloud-status-stack"
          ],
          "pathLabels": [
            "Cloud Status",
            "Cloud Bundles",
            "Multi Unit",
            "Cloud Stack Status Bundle"
          ],
          "taxonomyPath": "cloud-status.cloud-bundles.multi-unit.cloud-status-stack",
          "layout": {
            "department": {
              "id": "cloud-status",
              "name": "Cloud Status"
            },
            "aisle": {
              "id": "cloud-bundles",
              "name": "Cloud Bundles"
            },
            "shelf": {
              "id": "multi-unit",
              "name": "Multi Unit"
            },
            "offering": {
              "id": "cloud-status-stack",
              "name": "Cloud Stack Status Bundle"
            },
            "pathIds": [
              "cloud-status",
              "cloud-bundles",
              "multi-unit",
              "cloud-status-stack"
            ],
            "pathLabels": [
              "Cloud Status",
              "Cloud Bundles",
              "Multi Unit",
              "Cloud Stack Status Bundle"
            ]
          }
        },
        "description": {
          "short": "Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.",
          "full": "Purpose: Check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nBest use: Use this when an agent needs check up to twelve caller-selected cloud service/location units for a stack-wide public status verdict.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: targets.\nOptional fields: includeHistory, includeHealthy.\n\nAccepted fields:\n- targets (required, array): Caller-selected cloud checks. Stack price covers up to twelve normalized units. Constraints: min items: 3; max items: 12. Array items accept: provider, service, product, region, location.\n- includeHistory (optional, boolean): Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n- includeHealthy (optional, boolean): Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"targets\": [\n    {\n      \"provider\": \"aws\",\n      \"service\": \"lambda\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"aws\",\n      \"service\": \"s3\",\n      \"region\": \"us-east-1\"\n    },\n    {\n      \"provider\": \"gcp\",\n      \"product\": \"cloud-run\",\n      \"location\": \"us-central1\"\n    },\n    {\n      \"provider\": \"azure\",\n      \"service\": \"app-service\",\n      \"region\": \"eastus\"\n    }\n  ],\n  \"includeHistory\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "targets"
          ],
          "properties": {
            "targets": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "properties": {
                  "provider": {
                    "type": "string",
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ],
                    "description": "Cloud provider id."
                  },
                  "service": {
                    "type": "string",
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  "product": {
                    "type": "string",
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  "region": {
                    "type": "string",
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  "location": {
                    "type": "string",
                    "description": "Provider location alias. Treated the same as region."
                  }
                },
                "additionalProperties": false,
                "description": "Targets item object for configuring Cloud Stack Status Bundle."
              },
              "minItems": 3,
              "maxItems": 12,
              "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "targets"
          ],
          "properties": {
            "targets": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "properties": {
                  "provider": {
                    "type": "string",
                    "enum": [
                      "aws",
                      "gcp",
                      "azure",
                      "digitalocean",
                      "linode"
                    ],
                    "description": "Cloud provider id."
                  },
                  "service": {
                    "type": "string",
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  "product": {
                    "type": "string",
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  "region": {
                    "type": "string",
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  "location": {
                    "type": "string",
                    "description": "Provider location alias. Treated the same as region."
                  }
                },
                "additionalProperties": false,
                "description": "Targets item object for configuring Cloud Stack Status Bundle."
              },
              "minItems": 3,
              "maxItems": 12,
              "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units."
            },
            "includeHistory": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false."
            },
            "includeHealthy": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "targets"
          ],
          "optional": [
            "includeHistory",
            "includeHealthy"
          ],
          "fields": [
            {
              "name": "targets",
              "type": "array",
              "required": true,
              "description": "Caller-selected cloud checks. Stack price covers up to twelve normalized units.",
              "constraints": {
                "minItems": 3,
                "maxItems": 12
              },
              "items": {
                "type": "object",
                "required": [
                  "provider"
                ],
                "fields": [
                  {
                    "name": "provider",
                    "type": "string",
                    "required": true,
                    "description": "Cloud provider id.",
                    "constraints": {
                      "enum": [
                        "aws",
                        "gcp",
                        "azure",
                        "digitalocean",
                        "linode"
                      ]
                    }
                  },
                  {
                    "name": "service",
                    "type": "string",
                    "required": false,
                    "description": "Provider service name or id, for example ec2, lambda, app-service, spaces, droplets, object-storage, or lke."
                  },
                  {
                    "name": "product",
                    "type": "string",
                    "required": false,
                    "description": "GCP product name, id, or alias, for example cloud-run, vertex-ai, cloud-sql, or compute-engine."
                  },
                  {
                    "name": "region",
                    "type": "string",
                    "required": false,
                    "description": "Provider region/location such as us-east-1, us-central1, eastus, nyc3, us-east-newark, or global."
                  },
                  {
                    "name": "location",
                    "type": "string",
                    "required": false,
                    "description": "Provider location alias. Treated the same as region."
                  }
                ]
              }
            },
            {
              "name": "includeHistory",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include history behavior for Cloud Stack Status Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "includeHealthy",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include healthy behavior for Cloud Stack Status Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "targets": [
              {
                "provider": "aws",
                "service": "lambda",
                "region": "us-east-1"
              },
              {
                "provider": "aws",
                "service": "s3",
                "region": "us-east-1"
              },
              {
                "provider": "gcp",
                "product": "cloud-run",
                "location": "us-central1"
              },
              {
                "provider": "azure",
                "service": "app-service",
                "region": "eastus"
              }
            ],
            "includeHistory": false
          }
        },
        "exampleRequest": {
          "targets": [
            {
              "provider": "aws",
              "service": "lambda",
              "region": "us-east-1"
            },
            {
              "provider": "aws",
              "service": "s3",
              "region": "us-east-1"
            },
            {
              "provider": "gcp",
              "product": "cloud-run",
              "location": "us-central1"
            },
            {
              "provider": "azure",
              "service": "app-service",
              "region": "eastus"
            }
          ],
          "includeHistory": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "bundle": {
            "id": "custom-stack",
            "units": 5
          },
          "summary": {
            "worstStatus": "operational",
            "degraded": 0
          },
          "results": []
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/bundle",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Vibe Deploy Readiness Bundle",
      "description": "Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.",
      "longDescription": "Purpose: Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nBest use: Use this when an agent needs check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, services, includeComponents.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".\n- services (optional, array): Optional explicit service ids from /api/status/catalog. Constraints: min items: 1; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"vibe-deploy-readiness\",\n  \"includeComponents\": false\n}\n```",
      "category": "agent-utilities",
      "kind": "utility",
      "departmentId": "agent-utilities",
      "department": "Agent Utilities",
      "aisleId": "agent-artifacts",
      "aisle": "Agent Artifacts",
      "offeringId": "status-bundle-check",
      "offering": "Vibe Deploy Readiness Bundle",
      "pathIds": [
        "agent-utilities",
        "agent-artifacts",
        "status-bundle-check"
      ],
      "pathLabels": [
        "Agent Utilities",
        "Agent Artifacts",
        "Vibe Deploy Readiness Bundle"
      ],
      "taxonomyPath": "agent-utilities.agent-artifacts.status-bundle-check",
      "layout": {
        "department": {
          "id": "agent-utilities",
          "name": "Agent Utilities"
        },
        "aisle": {
          "id": "agent-artifacts",
          "name": "Agent Artifacts"
        },
        "offering": {
          "id": "status-bundle-check",
          "name": "Vibe Deploy Readiness Bundle"
        },
        "pathIds": [
          "agent-utilities",
          "agent-artifacts",
          "status-bundle-check"
        ],
        "pathLabels": [
          "Agent Utilities",
          "Agent Artifacts",
          "Vibe Deploy Readiness Bundle"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "deploy-readiness",
        "github",
        "gitlab",
        "vercel",
        "supabase",
        "openai"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "bundle": {
            "type": "string",
            "enum": [
              "vibe-deploy-readiness",
              "ai-app-stack",
              "source-and-ci",
              "deploy-platforms",
              "all"
            ],
            "default": "vibe-deploy-readiness",
            "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\"."
          },
          "services": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Services item value for Vibe Deploy Readiness Bundle."
            },
            "minItems": 1,
            "maxItems": 20,
            "description": "Optional explicit service ids from /api/status/catalog."
          },
          "includeComponents": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "bundle",
          "services",
          "includeComponents"
        ],
        "fields": [
          {
            "name": "bundle",
            "type": "string",
            "required": false,
            "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".",
            "constraints": {
              "enum": [
                "vibe-deploy-readiness",
                "ai-app-stack",
                "source-and-ci",
                "deploy-platforms",
                "all"
              ],
              "default": "vibe-deploy-readiness"
            }
          },
          {
            "name": "services",
            "type": "array",
            "required": false,
            "description": "Optional explicit service ids from /api/status/catalog.",
            "constraints": {
              "minItems": 1,
              "maxItems": 20
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "bundle": "vibe-deploy-readiness",
          "includeComponents": false
        }
      },
      "exampleRequest": {
        "bundle": "vibe-deploy-readiness",
        "includeComponents": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "bundle": {
          "id": "vibe-deploy-readiness"
        },
        "summary": {
          "status": "operational"
        },
        "results": [
          {
            "service": {
              "id": "github"
            },
            "status": "operational"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "bundle": "vibe-deploy-readiness",
                "includeComponents": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "bundle": {
                  "id": "vibe-deploy-readiness"
                },
                "summary": {
                  "status": "operational"
                },
                "results": [
                  {
                    "service": {
                      "id": "github"
                    },
                    "status": "operational"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/status/bundle",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "bundle": {
                        "type": "string",
                        "enum": [
                          "vibe-deploy-readiness",
                          "ai-app-stack",
                          "source-and-ci",
                          "deploy-platforms",
                          "all"
                        ],
                        "default": "vibe-deploy-readiness",
                        "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\"."
                      },
                      "services": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Services item value for Vibe Deploy Readiness Bundle."
                        },
                        "minItems": 1,
                        "maxItems": 20,
                        "description": "Optional explicit service ids from /api/status/catalog."
                      },
                      "includeComponents": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "status-bundle-check",
            "url": "https://agentbodega.store/api/status/bundle",
            "method": "POST",
            "description": "Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.",
            "longDescription": "Purpose: Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nBest use: Use this when an agent needs check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, services, includeComponents.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".\n- services (optional, array): Optional explicit service ids from /api/status/catalog. Constraints: min items: 1; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"vibe-deploy-readiness\",\n  \"includeComponents\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Vibe Deploy Readiness Bundle",
            "category": "agent-utilities",
            "kind": "utility",
            "tags": [
              "status",
              "deploy-readiness",
              "github",
              "gitlab",
              "vercel",
              "supabase",
              "openai"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "bundle",
                "services",
                "includeComponents"
              ],
              "fields": [
                {
                  "name": "bundle",
                  "type": "string",
                  "required": false,
                  "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".",
                  "constraints": {
                    "enum": [
                      "vibe-deploy-readiness",
                      "ai-app-stack",
                      "source-and-ci",
                      "deploy-platforms",
                      "all"
                    ],
                    "default": "vibe-deploy-readiness"
                  }
                },
                {
                  "name": "services",
                  "type": "array",
                  "required": false,
                  "description": "Optional explicit service ids from /api/status/catalog.",
                  "constraints": {
                    "minItems": 1,
                    "maxItems": 20
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "bundle": "vibe-deploy-readiness",
                "includeComponents": false
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "bundle": {
                  "type": "string",
                  "enum": [
                    "vibe-deploy-readiness",
                    "ai-app-stack",
                    "source-and-ci",
                    "deploy-platforms",
                    "all"
                  ],
                  "default": "vibe-deploy-readiness",
                  "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\"."
                },
                "services": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Services item value for Vibe Deploy Readiness Bundle."
                  },
                  "minItems": 1,
                  "maxItems": 20,
                  "description": "Optional explicit service ids from /api/status/catalog."
                },
                "includeComponents": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/bundle",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/bundle",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-utilities",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "agent-utilities",
          "department": "Agent Utilities",
          "aisleId": "agent-artifacts",
          "aisle": "Agent Artifacts",
          "offeringId": "status-bundle-check",
          "offering": "Vibe Deploy Readiness Bundle",
          "pathIds": [
            "agent-utilities",
            "agent-artifacts",
            "status-bundle-check"
          ],
          "pathLabels": [
            "Agent Utilities",
            "Agent Artifacts",
            "Vibe Deploy Readiness Bundle"
          ],
          "taxonomyPath": "agent-utilities.agent-artifacts.status-bundle-check",
          "layout": {
            "department": {
              "id": "agent-utilities",
              "name": "Agent Utilities"
            },
            "aisle": {
              "id": "agent-artifacts",
              "name": "Agent Artifacts"
            },
            "offering": {
              "id": "status-bundle-check",
              "name": "Vibe Deploy Readiness Bundle"
            },
            "pathIds": [
              "agent-utilities",
              "agent-artifacts",
              "status-bundle-check"
            ],
            "pathLabels": [
              "Agent Utilities",
              "Agent Artifacts",
              "Vibe Deploy Readiness Bundle"
            ]
          }
        },
        "description": {
          "short": "Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.",
          "full": "Purpose: Check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nBest use: Use this when an agent needs check a bundle of official status sources so an agent can decide whether to deploy, retry, or wait before blaming its own code.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: bundle, services, includeComponents.\n\nAccepted fields:\n- bundle (optional, string): Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".\n- services (optional, array): Optional explicit service ids from /api/status/catalog. Constraints: min items: 1; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"bundle\": \"vibe-deploy-readiness\",\n  \"includeComponents\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "bundle": {
              "type": "string",
              "enum": [
                "vibe-deploy-readiness",
                "ai-app-stack",
                "source-and-ci",
                "deploy-platforms",
                "all"
              ],
              "default": "vibe-deploy-readiness",
              "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\"."
            },
            "services": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Services item value for Vibe Deploy Readiness Bundle."
              },
              "minItems": 1,
              "maxItems": 20,
              "description": "Optional explicit service ids from /api/status/catalog."
            },
            "includeComponents": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "bundle": {
              "type": "string",
              "enum": [
                "vibe-deploy-readiness",
                "ai-app-stack",
                "source-and-ci",
                "deploy-platforms",
                "all"
              ],
              "default": "vibe-deploy-readiness",
              "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\"."
            },
            "services": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Services item value for Vibe Deploy Readiness Bundle."
              },
              "minItems": 1,
              "maxItems": 20,
              "description": "Optional explicit service ids from /api/status/catalog."
            },
            "includeComponents": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "bundle",
            "services",
            "includeComponents"
          ],
          "fields": [
            {
              "name": "bundle",
              "type": "string",
              "required": false,
              "description": "Bundle filter for Vibe Deploy Readiness Bundle. Accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\". Constraints: accepted values: \"vibe-deploy-readiness\", \"ai-app-stack\", \"source-and-ci\", \"deploy-platforms\", \"all\"; default: \"vibe-deploy-readiness\".",
              "constraints": {
                "enum": [
                  "vibe-deploy-readiness",
                  "ai-app-stack",
                  "source-and-ci",
                  "deploy-platforms",
                  "all"
                ],
                "default": "vibe-deploy-readiness"
              }
            },
            {
              "name": "services",
              "type": "array",
              "required": false,
              "description": "Optional explicit service ids from /api/status/catalog.",
              "constraints": {
                "minItems": 1,
                "maxItems": 20
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Vibe Deploy Readiness Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "bundle": "vibe-deploy-readiness",
            "includeComponents": false
          }
        },
        "exampleRequest": {
          "bundle": "vibe-deploy-readiness",
          "includeComponents": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "bundle": {
            "id": "vibe-deploy-readiness"
          },
          "summary": {
            "status": "operational"
          },
          "results": [
            {
              "service": {
                "id": "github"
              },
              "status": "operational"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/stack",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Custom Stack Status Bundle",
      "description": "Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.",
      "longDescription": "Purpose: Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nBest use: Use this when an agent needs check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: services.\nOptional fields: includeComponents.\n\nAccepted fields:\n- services (required, array): Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host. Constraints: min items: 3; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"services\": [\n    \"github\",\n    \"npm\",\n    \"vercel\",\n    \"supabase\",\n    \"openai\"\n  ],\n  \"includeComponents\": false\n}\n```",
      "category": "agent-utilities",
      "kind": "utility",
      "departmentId": "agent-utilities",
      "department": "Agent Utilities",
      "aisleId": "agent-artifacts",
      "aisle": "Agent Artifacts",
      "offeringId": "status-stack-bundle",
      "offering": "Custom Stack Status Bundle",
      "pathIds": [
        "agent-utilities",
        "agent-artifacts",
        "status-stack-bundle"
      ],
      "pathLabels": [
        "Agent Utilities",
        "Agent Artifacts",
        "Custom Stack Status Bundle"
      ],
      "taxonomyPath": "agent-utilities.agent-artifacts.status-stack-bundle",
      "layout": {
        "department": {
          "id": "agent-utilities",
          "name": "Agent Utilities"
        },
        "aisle": {
          "id": "agent-artifacts",
          "name": "Agent Artifacts"
        },
        "offering": {
          "id": "status-stack-bundle",
          "name": "Custom Stack Status Bundle"
        },
        "pathIds": [
          "agent-utilities",
          "agent-artifacts",
          "status-stack-bundle"
        ],
        "pathLabels": [
          "Agent Utilities",
          "Agent Artifacts",
          "Custom Stack Status Bundle"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "custom-stack",
        "deploy-readiness",
        "github",
        "vercel",
        "supabase",
        "openai"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "services"
        ],
        "properties": {
          "services": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Services item value for Custom Stack Status Bundle."
            },
            "minItems": 3,
            "maxItems": 20,
            "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host."
          },
          "includeComponents": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "services"
        ],
        "optional": [
          "includeComponents"
        ],
        "fields": [
          {
            "name": "services",
            "type": "array",
            "required": true,
            "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host.",
            "constraints": {
              "minItems": 3,
              "maxItems": 20
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "services": [
            "github",
            "npm",
            "vercel",
            "supabase",
            "openai"
          ],
          "includeComponents": false
        }
      },
      "exampleRequest": {
        "services": [
          "github",
          "npm",
          "vercel",
          "supabase",
          "openai"
        ],
        "includeComponents": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "bundle": {
          "id": "vibe-deploy-readiness"
        },
        "summary": {
          "status": "operational"
        },
        "results": [
          {
            "service": {
              "id": "github"
            },
            "status": "operational"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "services": [
                  "github",
                  "npm",
                  "vercel",
                  "supabase",
                  "openai"
                ],
                "includeComponents": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "bundle": {
                  "id": "vibe-deploy-readiness"
                },
                "summary": {
                  "status": "operational"
                },
                "results": [
                  {
                    "service": {
                      "id": "github"
                    },
                    "status": "operational"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/status/stack",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "services"
                    ],
                    "properties": {
                      "services": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Services item value for Custom Stack Status Bundle."
                        },
                        "minItems": 3,
                        "maxItems": 20,
                        "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host."
                      },
                      "includeComponents": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "status-stack-bundle",
            "url": "https://agentbodega.store/api/status/stack",
            "method": "POST",
            "description": "Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.",
            "longDescription": "Purpose: Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nBest use: Use this when an agent needs check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: services.\nOptional fields: includeComponents.\n\nAccepted fields:\n- services (required, array): Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host. Constraints: min items: 3; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"services\": [\n    \"github\",\n    \"npm\",\n    \"vercel\",\n    \"supabase\",\n    \"openai\"\n  ],\n  \"includeComponents\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Custom Stack Status Bundle",
            "category": "agent-utilities",
            "kind": "utility",
            "tags": [
              "status",
              "custom-stack",
              "deploy-readiness",
              "github",
              "vercel",
              "supabase",
              "openai"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "services"
              ],
              "optional": [
                "includeComponents"
              ],
              "fields": [
                {
                  "name": "services",
                  "type": "array",
                  "required": true,
                  "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host.",
                  "constraints": {
                    "minItems": 3,
                    "maxItems": 20
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "services": [
                  "github",
                  "npm",
                  "vercel",
                  "supabase",
                  "openai"
                ],
                "includeComponents": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "services"
              ],
              "properties": {
                "services": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Services item value for Custom Stack Status Bundle."
                  },
                  "minItems": 3,
                  "maxItems": 20,
                  "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host."
                },
                "includeComponents": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/stack",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/stack",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-utilities",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "agent-utilities",
          "department": "Agent Utilities",
          "aisleId": "agent-artifacts",
          "aisle": "Agent Artifacts",
          "offeringId": "status-stack-bundle",
          "offering": "Custom Stack Status Bundle",
          "pathIds": [
            "agent-utilities",
            "agent-artifacts",
            "status-stack-bundle"
          ],
          "pathLabels": [
            "Agent Utilities",
            "Agent Artifacts",
            "Custom Stack Status Bundle"
          ],
          "taxonomyPath": "agent-utilities.agent-artifacts.status-stack-bundle",
          "layout": {
            "department": {
              "id": "agent-utilities",
              "name": "Agent Utilities"
            },
            "aisle": {
              "id": "agent-artifacts",
              "name": "Agent Artifacts"
            },
            "offering": {
              "id": "status-stack-bundle",
              "name": "Custom Stack Status Bundle"
            },
            "pathIds": [
              "agent-utilities",
              "agent-artifacts",
              "status-stack-bundle"
            ],
            "pathLabels": [
              "Agent Utilities",
              "Agent Artifacts",
              "Custom Stack Status Bundle"
            ]
          }
        },
        "description": {
          "short": "Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.",
          "full": "Purpose: Check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nBest use: Use this when an agent needs check a caller-selected stack of official status sources at the stack-bundle price. Repeated stack layers are rejected before payment.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: services.\nOptional fields: includeComponents.\n\nAccepted fields:\n- services (required, array): Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host. Constraints: min items: 3; max items: 20.\n- includeComponents (optional, boolean): Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"services\": [\n    \"github\",\n    \"npm\",\n    \"vercel\",\n    \"supabase\",\n    \"openai\"\n  ],\n  \"includeComponents\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "services"
          ],
          "properties": {
            "services": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Services item value for Custom Stack Status Bundle."
              },
              "minItems": 3,
              "maxItems": 20,
              "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host."
            },
            "includeComponents": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "services"
          ],
          "properties": {
            "services": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Services item value for Custom Stack Status Bundle."
              },
              "minItems": 3,
              "maxItems": 20,
              "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host."
            },
            "includeComponents": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "services"
          ],
          "optional": [
            "includeComponents"
          ],
          "fields": [
            {
              "name": "services",
              "type": "array",
              "required": true,
              "description": "Service ids from /api/status/catalog. Stack pricing requires at least three stack roles and no repeated capped layer, for example one data layer and one deploy host.",
              "constraints": {
                "minItems": 3,
                "maxItems": 20
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Custom Stack Status Bundle. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "services": [
              "github",
              "npm",
              "vercel",
              "supabase",
              "openai"
            ],
            "includeComponents": false
          }
        },
        "exampleRequest": {
          "services": [
            "github",
            "npm",
            "vercel",
            "supabase",
            "openai"
          ],
          "includeComponents": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "bundle": {
            "id": "vibe-deploy-readiness"
          },
          "summary": {
            "status": "operational"
          },
          "results": [
            {
              "service": {
                "id": "github"
              },
              "status": "operational"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/github",
      "type": "http",
      "x402Version": 2,
      "serviceName": "GitHub Status Check",
      "description": "Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitHub Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "github",
      "shelf": "Github",
      "offeringId": "official-status-github",
      "offering": "GitHub Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "github",
        "official-status-github"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Github",
        "GitHub Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.github.official-status-github",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "github",
          "name": "Github"
        },
        "offering": {
          "id": "official-status-github",
          "name": "GitHub Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "github",
          "official-status-github"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Github",
          "GitHub Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "github",
        "git",
        "ci",
        "packages",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for GitHub Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "GitHub Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "GitHub Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/github",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for GitHub Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-github",
            "url": "https://agentbodega.store/api/status/github",
            "method": "POST",
            "description": "Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitHub Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "GitHub Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "github",
              "git",
              "ci",
              "packages",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for GitHub Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/github",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/github",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "github",
          "shelf": "Github",
          "offeringId": "official-status-github",
          "offering": "GitHub Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "github",
            "official-status-github"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Github",
            "GitHub Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.github.official-status-github",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "github",
              "name": "Github"
            },
            "offering": {
              "id": "official-status-github",
              "name": "GitHub Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "github",
              "official-status-github"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Github",
              "GitHub Status Check"
            ]
          }
        },
        "description": {
          "short": "Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitHub's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitHub Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for GitHub Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for GitHub Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for GitHub Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "GitHub Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/gitlab",
      "type": "http",
      "x402Version": 2,
      "serviceName": "GitLab Status Check",
      "description": "Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitLab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "gitlab",
      "shelf": "Gitlab",
      "offeringId": "official-status-gitlab",
      "offering": "GitLab Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "gitlab",
        "official-status-gitlab"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Gitlab",
        "GitLab Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.gitlab.official-status-gitlab",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "gitlab",
          "name": "Gitlab"
        },
        "offering": {
          "id": "official-status-gitlab",
          "name": "GitLab Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "gitlab",
          "official-status-gitlab"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Gitlab",
          "GitLab Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "gitlab",
        "git",
        "ci",
        "packages",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for GitLab Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "GitLab Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "GitLab Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/gitlab",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for GitLab Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-gitlab",
            "url": "https://agentbodega.store/api/status/gitlab",
            "method": "POST",
            "description": "Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitLab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "GitLab Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "gitlab",
              "git",
              "ci",
              "packages",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for GitLab Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/gitlab",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/gitlab",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "gitlab",
          "shelf": "Gitlab",
          "offeringId": "official-status-gitlab",
          "offering": "GitLab Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "gitlab",
            "official-status-gitlab"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Gitlab",
            "GitLab Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.gitlab.official-status-gitlab",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "gitlab",
              "name": "Gitlab"
            },
            "offering": {
              "id": "official-status-gitlab",
              "name": "GitLab Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "gitlab",
              "official-status-gitlab"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Gitlab",
              "GitLab Status Check"
            ]
          }
        },
        "description": {
          "short": "Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check GitLab.com's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for GitLab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for GitLab Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for GitLab Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for GitLab Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "GitLab Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/bitbucket",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Bitbucket Status Check",
      "description": "Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "bitbucket",
      "shelf": "Bitbucket",
      "offeringId": "official-status-bitbucket",
      "offering": "Bitbucket Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "bitbucket",
        "official-status-bitbucket"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Bitbucket",
        "Bitbucket Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.bitbucket.official-status-bitbucket",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "bitbucket",
          "name": "Bitbucket"
        },
        "offering": {
          "id": "official-status-bitbucket",
          "name": "Bitbucket Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "bitbucket",
          "official-status-bitbucket"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Bitbucket",
          "Bitbucket Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "bitbucket",
        "git",
        "ci",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Bitbucket Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Bitbucket Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Bitbucket Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/bitbucket",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Bitbucket Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-bitbucket",
            "url": "https://agentbodega.store/api/status/bitbucket",
            "method": "POST",
            "description": "Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Bitbucket Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "bitbucket",
              "git",
              "ci",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Bitbucket Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/bitbucket",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/bitbucket",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "bitbucket",
          "shelf": "Bitbucket",
          "offeringId": "official-status-bitbucket",
          "offering": "Bitbucket Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "bitbucket",
            "official-status-bitbucket"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Bitbucket",
            "Bitbucket Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.bitbucket.official-status-bitbucket",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "bitbucket",
              "name": "Bitbucket"
            },
            "offering": {
              "id": "official-status-bitbucket",
              "name": "Bitbucket Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "bitbucket",
              "official-status-bitbucket"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Bitbucket",
              "Bitbucket Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bitbucket's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Bitbucket Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Bitbucket Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Bitbucket Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Bitbucket Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/npm",
      "type": "http",
      "x402Version": 2,
      "serviceName": "npm Status Check",
      "description": "Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for npm Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "npm",
      "shelf": "Npm",
      "offeringId": "official-status-npm",
      "offering": "npm Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "npm",
        "official-status-npm"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Npm",
        "npm Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.npm.official-status-npm",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "npm",
          "name": "Npm"
        },
        "offering": {
          "id": "official-status-npm",
          "name": "npm Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "npm",
          "official-status-npm"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Npm",
          "npm Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "npm",
        "node",
        "packages",
        "registry",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for npm Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "npm Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "npm Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/npm",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for npm Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-npm",
            "url": "https://agentbodega.store/api/status/npm",
            "method": "POST",
            "description": "Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for npm Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "npm Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "npm",
              "node",
              "packages",
              "registry",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for npm Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/npm",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/npm",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "npm",
          "shelf": "Npm",
          "offeringId": "official-status-npm",
          "offering": "npm Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "npm",
            "official-status-npm"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Npm",
            "npm Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.npm.official-status-npm",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "npm",
              "name": "Npm"
            },
            "offering": {
              "id": "official-status-npm",
              "name": "npm Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "npm",
              "official-status-npm"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Npm",
              "npm Status Check"
            ]
          }
        },
        "description": {
          "short": "Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check npm's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for npm Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for npm Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for npm Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for npm Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "npm Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/vercel",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Vercel Status Check",
      "description": "Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vercel Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "vercel",
      "shelf": "Vercel",
      "offeringId": "official-status-vercel",
      "offering": "Vercel Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "vercel",
        "official-status-vercel"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Vercel",
        "Vercel Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.vercel.official-status-vercel",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "vercel",
          "name": "Vercel"
        },
        "offering": {
          "id": "official-status-vercel",
          "name": "Vercel Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "vercel",
          "official-status-vercel"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Vercel",
          "Vercel Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "vercel",
        "deploy",
        "hosting",
        "nextjs",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Vercel Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Vercel Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Vercel Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/vercel",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Vercel Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-vercel",
            "url": "https://agentbodega.store/api/status/vercel",
            "method": "POST",
            "description": "Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vercel Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Vercel Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "vercel",
              "deploy",
              "hosting",
              "nextjs",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Vercel Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/vercel",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/vercel",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "vercel",
          "shelf": "Vercel",
          "offeringId": "official-status-vercel",
          "offering": "Vercel Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "vercel",
            "official-status-vercel"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Vercel",
            "Vercel Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.vercel.official-status-vercel",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "vercel",
              "name": "Vercel"
            },
            "offering": {
              "id": "official-status-vercel",
              "name": "Vercel Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "vercel",
              "official-status-vercel"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Vercel",
              "Vercel Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Vercel's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Vercel Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Vercel Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Vercel Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Vercel Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Vercel Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/netlify",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Netlify Status Check",
      "description": "Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Netlify Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "netlify",
      "shelf": "Netlify",
      "offeringId": "official-status-netlify",
      "offering": "Netlify Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "netlify",
        "official-status-netlify"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Netlify",
        "Netlify Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.netlify.official-status-netlify",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "netlify",
          "name": "Netlify"
        },
        "offering": {
          "id": "official-status-netlify",
          "name": "Netlify Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "netlify",
          "official-status-netlify"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Netlify",
          "Netlify Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "netlify",
        "deploy",
        "hosting",
        "functions",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Netlify Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Netlify Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Netlify Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/netlify",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Netlify Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-netlify",
            "url": "https://agentbodega.store/api/status/netlify",
            "method": "POST",
            "description": "Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Netlify Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Netlify Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "netlify",
              "deploy",
              "hosting",
              "functions",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Netlify Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/netlify",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/netlify",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "netlify",
          "shelf": "Netlify",
          "offeringId": "official-status-netlify",
          "offering": "Netlify Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "netlify",
            "official-status-netlify"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Netlify",
            "Netlify Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.netlify.official-status-netlify",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "netlify",
              "name": "Netlify"
            },
            "offering": {
              "id": "official-status-netlify",
              "name": "Netlify Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "netlify",
              "official-status-netlify"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Netlify",
              "Netlify Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Netlify's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Netlify Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Netlify Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Netlify Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Netlify Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Netlify Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/render",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Render Status Check",
      "description": "Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Render Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "render",
      "shelf": "Render",
      "offeringId": "official-status-render",
      "offering": "Render Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "render",
        "official-status-render"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Render",
        "Render Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.render.official-status-render",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "render",
          "name": "Render"
        },
        "offering": {
          "id": "official-status-render",
          "name": "Render Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "render",
          "official-status-render"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Render",
          "Render Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "render",
        "deploy",
        "hosting",
        "postgres",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Render Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Render Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Render Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/render",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Render Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-render",
            "url": "https://agentbodega.store/api/status/render",
            "method": "POST",
            "description": "Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Render Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Render Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "render",
              "deploy",
              "hosting",
              "postgres",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Render Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/render",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/render",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "render",
          "shelf": "Render",
          "offeringId": "official-status-render",
          "offering": "Render Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "render",
            "official-status-render"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Render",
            "Render Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.render.official-status-render",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "render",
              "name": "Render"
            },
            "offering": {
              "id": "official-status-render",
              "name": "Render Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "render",
              "official-status-render"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Render",
              "Render Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Render's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Render Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Render Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Render Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Render Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Render Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/fly",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Fly.io Status Check",
      "description": "Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "fly",
      "shelf": "Fly",
      "offeringId": "official-status-fly",
      "offering": "Fly.io Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "fly",
        "official-status-fly"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Fly",
        "Fly.io Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.fly.official-status-fly",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "fly",
          "name": "Fly"
        },
        "offering": {
          "id": "official-status-fly",
          "name": "Fly.io Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "fly",
          "official-status-fly"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Fly",
          "Fly.io Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "fly",
        "flyio",
        "deploy",
        "hosting",
        "edge",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Fly.io Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Fly.io Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Fly.io Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/fly",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Fly.io Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-fly",
            "url": "https://agentbodega.store/api/status/fly",
            "method": "POST",
            "description": "Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Fly.io Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "fly",
              "flyio",
              "deploy",
              "hosting",
              "edge",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Fly.io Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/fly",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/fly",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "fly",
          "shelf": "Fly",
          "offeringId": "official-status-fly",
          "offering": "Fly.io Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "fly",
            "official-status-fly"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Fly",
            "Fly.io Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.fly.official-status-fly",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "fly",
              "name": "Fly"
            },
            "offering": {
              "id": "official-status-fly",
              "name": "Fly.io Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "fly",
              "official-status-fly"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Fly",
              "Fly.io Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Fly.io's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Fly.io Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Fly.io Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Fly.io Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Fly.io Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/railway",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Railway Status Check",
      "description": "Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Railway Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "railway",
      "shelf": "Railway",
      "offeringId": "official-status-railway",
      "offering": "Railway Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "railway",
        "official-status-railway"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Railway",
        "Railway Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.railway.official-status-railway",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "railway",
          "name": "Railway"
        },
        "offering": {
          "id": "official-status-railway",
          "name": "Railway Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "railway",
          "official-status-railway"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Railway",
          "Railway Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "railway",
        "deploy",
        "hosting",
        "builds",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Railway Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Railway Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Railway Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/railway",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Railway Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-railway",
            "url": "https://agentbodega.store/api/status/railway",
            "method": "POST",
            "description": "Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Railway Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Railway Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "railway",
              "deploy",
              "hosting",
              "builds",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Railway Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/railway",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/railway",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "railway",
          "shelf": "Railway",
          "offeringId": "official-status-railway",
          "offering": "Railway Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "railway",
            "official-status-railway"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Railway",
            "Railway Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.railway.official-status-railway",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "railway",
              "name": "Railway"
            },
            "offering": {
              "id": "official-status-railway",
              "name": "Railway Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "railway",
              "official-status-railway"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Railway",
              "Railway Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Railway's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Railway Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Railway Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Railway Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Railway Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Railway Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/coinbase",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Coinbase Status Check",
      "description": "Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "coinbase",
      "shelf": "Coinbase",
      "offeringId": "official-status-coinbase",
      "offering": "Coinbase Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "coinbase",
        "official-status-coinbase"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Coinbase",
        "Coinbase Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.coinbase.official-status-coinbase",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "coinbase",
          "name": "Coinbase"
        },
        "offering": {
          "id": "official-status-coinbase",
          "name": "Coinbase Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "coinbase",
          "official-status-coinbase"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Coinbase",
          "Coinbase Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "coinbase",
        "crypto",
        "payments",
        "wallet",
        "api",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Coinbase Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Coinbase Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Coinbase Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/coinbase",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Coinbase Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-coinbase",
            "url": "https://agentbodega.store/api/status/coinbase",
            "method": "POST",
            "description": "Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Coinbase Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "coinbase",
              "crypto",
              "payments",
              "wallet",
              "api",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Coinbase Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/coinbase",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/coinbase",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "coinbase",
          "shelf": "Coinbase",
          "offeringId": "official-status-coinbase",
          "offering": "Coinbase Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "coinbase",
            "official-status-coinbase"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Coinbase",
            "Coinbase Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.coinbase.official-status-coinbase",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "coinbase",
              "name": "Coinbase"
            },
            "offering": {
              "id": "official-status-coinbase",
              "name": "Coinbase Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "coinbase",
              "official-status-coinbase"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Coinbase",
              "Coinbase Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Coinbase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Coinbase Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Coinbase Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Coinbase Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Coinbase Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/cursor",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cursor Status Check",
      "description": "Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cursor Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "cursor",
      "shelf": "Cursor",
      "offeringId": "official-status-cursor",
      "offering": "Cursor Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "cursor",
        "official-status-cursor"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Cursor",
        "Cursor Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.cursor.official-status-cursor",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "cursor",
          "name": "Cursor"
        },
        "offering": {
          "id": "official-status-cursor",
          "name": "Cursor Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "cursor",
          "official-status-cursor"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Cursor",
          "Cursor Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cursor",
        "ai",
        "editor",
        "ide",
        "developer-tools",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Cursor Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Cursor Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Cursor Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/cursor",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Cursor Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-cursor",
            "url": "https://agentbodega.store/api/status/cursor",
            "method": "POST",
            "description": "Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cursor Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cursor Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "cursor",
              "ai",
              "editor",
              "ide",
              "developer-tools",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Cursor Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/cursor",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/cursor",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "cursor",
          "shelf": "Cursor",
          "offeringId": "official-status-cursor",
          "offering": "Cursor Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "cursor",
            "official-status-cursor"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Cursor",
            "Cursor Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.cursor.official-status-cursor",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "cursor",
              "name": "Cursor"
            },
            "offering": {
              "id": "official-status-cursor",
              "name": "Cursor Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "cursor",
              "official-status-cursor"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Cursor",
              "Cursor Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cursor's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cursor Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Cursor Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Cursor Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Cursor Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Cursor Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/bambulab",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Bambu Lab Status Check",
      "description": "Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "bambulab",
      "shelf": "Bambulab",
      "offeringId": "official-status-bambulab",
      "offering": "Bambu Lab Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "bambulab",
        "official-status-bambulab"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Bambulab",
        "Bambu Lab Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.bambulab.official-status-bambulab",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "bambulab",
          "name": "Bambulab"
        },
        "offering": {
          "id": "official-status-bambulab",
          "name": "Bambu Lab Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "bambulab",
          "official-status-bambulab"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Bambulab",
          "Bambu Lab Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "bambu-lab",
        "3d-printing",
        "hardware",
        "iot",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Bambu Lab Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Bambu Lab Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Bambu Lab Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/bambulab",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Bambu Lab Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-bambulab",
            "url": "https://agentbodega.store/api/status/bambulab",
            "method": "POST",
            "description": "Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Bambu Lab Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "bambu-lab",
              "3d-printing",
              "hardware",
              "iot",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Bambu Lab Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/bambulab",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/bambulab",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "bambulab",
          "shelf": "Bambulab",
          "offeringId": "official-status-bambulab",
          "offering": "Bambu Lab Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "bambulab",
            "official-status-bambulab"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Bambulab",
            "Bambu Lab Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.bambulab.official-status-bambulab",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "bambulab",
              "name": "Bambulab"
            },
            "offering": {
              "id": "official-status-bambulab",
              "name": "Bambu Lab Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "bambulab",
              "official-status-bambulab"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Bambulab",
              "Bambu Lab Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Bambu Lab's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Bambu Lab Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Bambu Lab Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Bambu Lab Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Bambu Lab Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/ring",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Ring Status Check",
      "description": "Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Ring Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "ring",
      "shelf": "Ring",
      "offeringId": "official-status-ring",
      "offering": "Ring Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "ring",
        "official-status-ring"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Ring",
        "Ring Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.ring.official-status-ring",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "ring",
          "name": "Ring"
        },
        "offering": {
          "id": "official-status-ring",
          "name": "Ring Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "ring",
          "official-status-ring"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Ring",
          "Ring Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "ring",
        "iot",
        "security",
        "camera",
        "smart-home",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Ring Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Ring Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Ring Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/ring",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Ring Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-ring",
            "url": "https://agentbodega.store/api/status/ring",
            "method": "POST",
            "description": "Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Ring Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Ring Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "ring",
              "iot",
              "security",
              "camera",
              "smart-home",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Ring Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/ring",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/ring",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "ring",
          "shelf": "Ring",
          "offeringId": "official-status-ring",
          "offering": "Ring Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "ring",
            "official-status-ring"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Ring",
            "Ring Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.ring.official-status-ring",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "ring",
              "name": "Ring"
            },
            "offering": {
              "id": "official-status-ring",
              "name": "Ring Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "ring",
              "official-status-ring"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Ring",
              "Ring Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Ring's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Ring Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Ring Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Ring Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Ring Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Ring Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/cloudflare",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Cloudflare Status Check",
      "description": "Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "cloudflare",
      "shelf": "Cloudflare",
      "offeringId": "official-status-cloudflare",
      "offering": "Cloudflare Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "cloudflare",
        "official-status-cloudflare"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Cloudflare",
        "Cloudflare Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.cloudflare.official-status-cloudflare",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "cloudflare",
          "name": "Cloudflare"
        },
        "offering": {
          "id": "official-status-cloudflare",
          "name": "Cloudflare Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "cloudflare",
          "official-status-cloudflare"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Cloudflare",
          "Cloudflare Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "cloudflare",
        "dns",
        "cdn",
        "workers",
        "edge",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Cloudflare Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Cloudflare Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Cloudflare Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/cloudflare",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Cloudflare Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-cloudflare",
            "url": "https://agentbodega.store/api/status/cloudflare",
            "method": "POST",
            "description": "Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Cloudflare Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "cloudflare",
              "dns",
              "cdn",
              "workers",
              "edge",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Cloudflare Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/cloudflare",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/cloudflare",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "cloudflare",
          "shelf": "Cloudflare",
          "offeringId": "official-status-cloudflare",
          "offering": "Cloudflare Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "cloudflare",
            "official-status-cloudflare"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Cloudflare",
            "Cloudflare Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.cloudflare.official-status-cloudflare",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "cloudflare",
              "name": "Cloudflare"
            },
            "offering": {
              "id": "official-status-cloudflare",
              "name": "Cloudflare Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "cloudflare",
              "official-status-cloudflare"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Cloudflare",
              "Cloudflare Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Cloudflare's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Cloudflare Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Cloudflare Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Cloudflare Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Cloudflare Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/supabase",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Supabase Status Check",
      "description": "Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Supabase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "supabase",
      "shelf": "Supabase",
      "offeringId": "official-status-supabase",
      "offering": "Supabase Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "supabase",
        "official-status-supabase"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Supabase",
        "Supabase Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.supabase.official-status-supabase",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "supabase",
          "name": "Supabase"
        },
        "offering": {
          "id": "official-status-supabase",
          "name": "Supabase Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "supabase",
          "official-status-supabase"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Supabase",
          "Supabase Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "supabase",
        "postgres",
        "auth",
        "storage",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Supabase Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Supabase Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Supabase Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/supabase",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Supabase Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-supabase",
            "url": "https://agentbodega.store/api/status/supabase",
            "method": "POST",
            "description": "Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Supabase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Supabase Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "supabase",
              "postgres",
              "auth",
              "storage",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Supabase Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/supabase",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/supabase",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "supabase",
          "shelf": "Supabase",
          "offeringId": "official-status-supabase",
          "offering": "Supabase Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "supabase",
            "official-status-supabase"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Supabase",
            "Supabase Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.supabase.official-status-supabase",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "supabase",
              "name": "Supabase"
            },
            "offering": {
              "id": "official-status-supabase",
              "name": "Supabase Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "supabase",
              "official-status-supabase"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Supabase",
              "Supabase Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Supabase's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Supabase Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Supabase Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Supabase Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Supabase Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Supabase Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/convex",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Convex Status Check",
      "description": "Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Convex Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "convex",
      "shelf": "Convex",
      "offeringId": "official-status-convex",
      "offering": "Convex Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "convex",
        "official-status-convex"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Convex",
        "Convex Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.convex.official-status-convex",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "convex",
          "name": "Convex"
        },
        "offering": {
          "id": "official-status-convex",
          "name": "Convex Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "convex",
          "official-status-convex"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Convex",
          "Convex Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "convex",
        "backend",
        "database",
        "realtime",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Convex Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Convex Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Convex Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/convex",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Convex Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-convex",
            "url": "https://agentbodega.store/api/status/convex",
            "method": "POST",
            "description": "Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Convex Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Convex Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "convex",
              "backend",
              "database",
              "realtime",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Convex Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/convex",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/convex",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "convex",
          "shelf": "Convex",
          "offeringId": "official-status-convex",
          "offering": "Convex Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "convex",
            "official-status-convex"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Convex",
            "Convex Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.convex.official-status-convex",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "convex",
              "name": "Convex"
            },
            "offering": {
              "id": "official-status-convex",
              "name": "Convex Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "convex",
              "official-status-convex"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Convex",
              "Convex Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Convex's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Convex Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Convex Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Convex Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Convex Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Convex Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/clerk",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Clerk Status Check",
      "description": "Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Clerk Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "clerk",
      "shelf": "Clerk",
      "offeringId": "official-status-clerk",
      "offering": "Clerk Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "clerk",
        "official-status-clerk"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Clerk",
        "Clerk Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.clerk.official-status-clerk",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "clerk",
          "name": "Clerk"
        },
        "offering": {
          "id": "official-status-clerk",
          "name": "Clerk Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "clerk",
          "official-status-clerk"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Clerk",
          "Clerk Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "clerk",
        "auth",
        "identity",
        "sessions",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Clerk Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Clerk Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Clerk Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/clerk",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Clerk Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-clerk",
            "url": "https://agentbodega.store/api/status/clerk",
            "method": "POST",
            "description": "Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Clerk Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Clerk Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "clerk",
              "auth",
              "identity",
              "sessions",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Clerk Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/clerk",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/clerk",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "clerk",
          "shelf": "Clerk",
          "offeringId": "official-status-clerk",
          "offering": "Clerk Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "clerk",
            "official-status-clerk"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Clerk",
            "Clerk Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.clerk.official-status-clerk",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "clerk",
              "name": "Clerk"
            },
            "offering": {
              "id": "official-status-clerk",
              "name": "Clerk Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "clerk",
              "official-status-clerk"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Clerk",
              "Clerk Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Clerk's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Clerk Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Clerk Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Clerk Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Clerk Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Clerk Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/openai",
      "type": "http",
      "x402Version": 2,
      "serviceName": "OpenAI Status Check",
      "description": "Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "openai",
      "shelf": "Openai",
      "offeringId": "official-status-openai",
      "offering": "OpenAI Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "openai",
        "official-status-openai"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Openai",
        "OpenAI Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.openai.official-status-openai",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "openai",
          "name": "Openai"
        },
        "offering": {
          "id": "official-status-openai",
          "name": "OpenAI Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "openai",
          "official-status-openai"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Openai",
          "OpenAI Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "openai",
        "ai",
        "llm",
        "api",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for OpenAI Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "OpenAI Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "OpenAI Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/openai",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for OpenAI Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-openai",
            "url": "https://agentbodega.store/api/status/openai",
            "method": "POST",
            "description": "Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "OpenAI Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "openai",
              "ai",
              "llm",
              "api",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for OpenAI Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/openai",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/openai",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "openai",
          "shelf": "Openai",
          "offeringId": "official-status-openai",
          "offering": "OpenAI Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "openai",
            "official-status-openai"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Openai",
            "OpenAI Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.openai.official-status-openai",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "openai",
              "name": "Openai"
            },
            "offering": {
              "id": "official-status-openai",
              "name": "OpenAI Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "openai",
              "official-status-openai"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Openai",
              "OpenAI Status Check"
            ]
          }
        },
        "description": {
          "short": "Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check OpenAI's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for OpenAI Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for OpenAI Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for OpenAI Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "OpenAI Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/status/anthropic",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Anthropic Claude Status Check",
      "description": "Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
      "longDescription": "Purpose: Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
      "category": "official-status",
      "kind": "status-alias",
      "departmentId": "official-status",
      "department": "Status & Infra",
      "aisleId": "direct-status-checks",
      "aisle": "Direct Status Checks",
      "shelfId": "anthropic",
      "shelf": "Anthropic",
      "offeringId": "official-status-anthropic",
      "offering": "Anthropic Claude Status Check",
      "pathIds": [
        "official-status",
        "direct-status-checks",
        "anthropic",
        "official-status-anthropic"
      ],
      "pathLabels": [
        "Status & Infra",
        "Direct Status Checks",
        "Anthropic",
        "Anthropic Claude Status Check"
      ],
      "taxonomyPath": "official-status.direct-status-checks.anthropic.official-status-anthropic",
      "layout": {
        "department": {
          "id": "official-status",
          "name": "Status & Infra"
        },
        "aisle": {
          "id": "direct-status-checks",
          "name": "Direct Status Checks"
        },
        "shelf": {
          "id": "anthropic",
          "name": "Anthropic"
        },
        "offering": {
          "id": "official-status-anthropic",
          "name": "Anthropic Claude Status Check"
        },
        "pathIds": [
          "official-status",
          "direct-status-checks",
          "anthropic",
          "official-status-anthropic"
        ],
        "pathLabels": [
          "Status & Infra",
          "Direct Status Checks",
          "Anthropic",
          "Anthropic Claude Status Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "status",
        "anthropic",
        "claude",
        "ai",
        "llm",
        "api",
        "incident-response"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeComponents": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true."
          },
          "includeIncidentDetails": {
            "type": "boolean",
            "default": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
          },
          "incidentLimit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true."
          },
          "component": {
            "type": "string",
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Components item value for Anthropic Claude Status Check."
            },
            "maxItems": 12,
            "description": "Optional component selectors when the caller wants a scoped provider status."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [],
        "optional": [
          "includeComponents",
          "includeIncidentDetails",
          "incidentLimit",
          "component",
          "components"
        ],
        "fields": [
          {
            "name": "includeComponents",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          },
          {
            "name": "includeIncidentDetails",
            "type": "boolean",
            "required": false,
            "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
            "constraints": {
              "default": false
            }
          },
          {
            "name": "incidentLimit",
            "type": "integer",
            "required": false,
            "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
            "constraints": {
              "default": 5,
              "minimum": 1,
              "maximum": 20
            }
          },
          {
            "name": "component",
            "type": "string",
            "required": false,
            "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
          },
          {
            "name": "components",
            "type": "array",
            "required": false,
            "description": "Optional component selectors when the caller wants a scoped provider status.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "includeComponents": true
        }
      },
      "exampleRequest": {
        "includeComponents": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "service": {
          "name": "Anthropic Claude Status Check"
        },
        "ok": true,
        "status": "operational",
        "recommendation": "No provider incident is visible."
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "includeComponents": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "service": {
                  "name": "Anthropic Claude Status Check"
                },
                "ok": true,
                "status": "operational",
                "recommendation": "No provider incident is visible."
              }
            }
          },
          "routeTemplate": "/api/status/anthropic",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "properties": {
                      "includeComponents": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true."
                      },
                      "includeIncidentDetails": {
                        "type": "boolean",
                        "default": false,
                        "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                      },
                      "incidentLimit": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 20,
                        "default": 5,
                        "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                      },
                      "component": {
                        "type": "string",
                        "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                      },
                      "components": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Components item value for Anthropic Claude Status Check."
                        },
                        "maxItems": 12,
                        "description": "Optional component selectors when the caller wants a scoped provider status."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "official-status-anthropic",
            "url": "https://agentbodega.store/api/status/anthropic",
            "method": "POST",
            "description": "Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
            "longDescription": "Purpose: Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Anthropic Claude Status Check",
            "category": "official-status",
            "kind": "status-alias",
            "tags": [
              "status",
              "anthropic",
              "claude",
              "ai",
              "llm",
              "api",
              "incident-response"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [],
              "optional": [
                "includeComponents",
                "includeIncidentDetails",
                "incidentLimit",
                "component",
                "components"
              ],
              "fields": [
                {
                  "name": "includeComponents",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                },
                {
                  "name": "includeIncidentDetails",
                  "type": "boolean",
                  "required": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
                  "constraints": {
                    "default": false
                  }
                },
                {
                  "name": "incidentLimit",
                  "type": "integer",
                  "required": false,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
                  "constraints": {
                    "default": 5,
                    "minimum": 1,
                    "maximum": 20
                  }
                },
                {
                  "name": "component",
                  "type": "string",
                  "required": false,
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                {
                  "name": "components",
                  "type": "array",
                  "required": false,
                  "description": "Optional component selectors when the caller wants a scoped provider status.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "includeComponents": true
              }
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "includeComponents": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true."
                },
                "includeIncidentDetails": {
                  "type": "boolean",
                  "default": false,
                  "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
                },
                "incidentLimit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 20,
                  "default": 5,
                  "description": "Maximum recent incidents to return when includeIncidentDetails is true."
                },
                "component": {
                  "type": "string",
                  "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
                },
                "components": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Components item value for Anthropic Claude Status Check."
                  },
                  "maxItems": 12,
                  "description": "Optional component selectors when the caller wants a scoped provider status."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/status/anthropic",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/status/anthropic",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "official-status",
        "kind": "status-alias",
        "taxonomy": {
          "departmentId": "official-status",
          "department": "Status & Infra",
          "aisleId": "direct-status-checks",
          "aisle": "Direct Status Checks",
          "shelfId": "anthropic",
          "shelf": "Anthropic",
          "offeringId": "official-status-anthropic",
          "offering": "Anthropic Claude Status Check",
          "pathIds": [
            "official-status",
            "direct-status-checks",
            "anthropic",
            "official-status-anthropic"
          ],
          "pathLabels": [
            "Status & Infra",
            "Direct Status Checks",
            "Anthropic",
            "Anthropic Claude Status Check"
          ],
          "taxonomyPath": "official-status.direct-status-checks.anthropic.official-status-anthropic",
          "layout": {
            "department": {
              "id": "official-status",
              "name": "Status & Infra"
            },
            "aisle": {
              "id": "direct-status-checks",
              "name": "Direct Status Checks"
            },
            "shelf": {
              "id": "anthropic",
              "name": "Anthropic"
            },
            "offering": {
              "id": "official-status-anthropic",
              "name": "Anthropic Claude Status Check"
            },
            "pathIds": [
              "official-status",
              "direct-status-checks",
              "anthropic",
              "official-status-anthropic"
            ],
            "pathLabels": [
              "Status & Infra",
              "Direct Status Checks",
              "Anthropic",
              "Anthropic Claude Status Check"
            ]
          }
        },
        "description": {
          "short": "Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.",
          "full": "Purpose: Check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nBest use: Use this when an agent needs check Anthropic Claude's official status source for current incidents, component health, and scheduled maintenance before an agent retries, deploys, or escalates.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: none.\nOptional fields: includeComponents, includeIncidentDetails, incidentLimit, component, components.\n\nAccepted fields:\n- includeComponents (optional, boolean): Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true. Constraints: default: true.\n- includeIncidentDetails (optional, boolean): Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json. Constraints: default: false.\n- incidentLimit (optional, integer): Maximum recent incidents to return when includeIncidentDetails is true. Constraints: default: 5; min: 1; max: 20.\n- component (optional, string): Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government.\n- components (optional, array): Optional component selectors when the caller wants a scoped provider status. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"includeComponents\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Anthropic Claude Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "properties": {
            "includeComponents": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true."
            },
            "includeIncidentDetails": {
              "type": "boolean",
              "default": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json."
            },
            "incidentLimit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true."
            },
            "component": {
              "type": "string",
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Components item value for Anthropic Claude Status Check."
              },
              "maxItems": 12,
              "description": "Optional component selectors when the caller wants a scoped provider status."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [],
          "optional": [
            "includeComponents",
            "includeIncidentDetails",
            "incidentLimit",
            "component",
            "components"
          ],
          "fields": [
            {
              "name": "includeComponents",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include components behavior for Anthropic Claude Status Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            },
            {
              "name": "includeIncidentDetails",
              "type": "boolean",
              "required": false,
              "description": "Optional deep incident history/timeline fetch. For Status.io providers this parses the public history page; for Statuspage providers it uses /api/v2/incidents.json.",
              "constraints": {
                "default": false
              }
            },
            {
              "name": "incidentLimit",
              "type": "integer",
              "required": false,
              "description": "Maximum recent incidents to return when includeIncidentDetails is true.",
              "constraints": {
                "default": 5,
                "minimum": 1,
                "maximum": 20
              }
            },
            {
              "name": "component",
              "type": "string",
              "required": false,
              "description": "Optional component selector, alias, id, or name. For Anthropic examples: api, code, console, claude-ai, cowork, government."
            },
            {
              "name": "components",
              "type": "array",
              "required": false,
              "description": "Optional component selectors when the caller wants a scoped provider status.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "includeComponents": true
          }
        },
        "exampleRequest": {
          "includeComponents": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "service": {
            "name": "Anthropic Claude Status Check"
          },
          "ok": true,
          "status": "operational",
          "recommendation": "No provider incident is visible."
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/check/domain",
      "type": "http",
      "x402Version": 2,
      "serviceName": "DNS SSL Email Launch Check",
      "description": "Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.",
      "longDescription": "Purpose: Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nBest use: Use this when an agent needs check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: domain.\nOptional fields: dkimSelectors.\n\nAccepted fields:\n- domain (required, string): Domain name to inspect, without a URL scheme. Constraints: min length: 1.\n- dkimSelectors (optional, array): Optional DKIM selectors to check, such as google or selector1. Constraints: max items: 10.\n\nExample request body:\n```json\n{\n  \"domain\": \"example.com\",\n  \"dkimSelectors\": [\n    \"google\",\n    \"selector1\"\n  ]\n}\n```",
      "category": "launch-checks",
      "kind": "utility",
      "departmentId": "launch-checks",
      "department": "Launch Checks",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "utility",
      "shelf": "Utility",
      "offeringId": "domain-launch-check",
      "offering": "DNS SSL Email Launch Check",
      "pathIds": [
        "launch-checks",
        "readiness-audits",
        "utility",
        "domain-launch-check"
      ],
      "pathLabels": [
        "Launch Checks",
        "Readiness Audits",
        "Utility",
        "DNS SSL Email Launch Check"
      ],
      "taxonomyPath": "launch-checks.readiness-audits.utility.domain-launch-check",
      "layout": {
        "department": {
          "id": "launch-checks",
          "name": "Launch Checks"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "utility",
          "name": "Utility"
        },
        "offering": {
          "id": "domain-launch-check",
          "name": "DNS SSL Email Launch Check"
        },
        "pathIds": [
          "launch-checks",
          "readiness-audits",
          "utility",
          "domain-launch-check"
        ],
        "pathLabels": [
          "Launch Checks",
          "Readiness Audits",
          "Utility",
          "DNS SSL Email Launch Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "dns",
        "ssl",
        "email",
        "deliverability",
        "launch-check"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "20000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "20000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "domain"
        ],
        "properties": {
          "domain": {
            "type": "string",
            "minLength": 1,
            "description": "Domain name to inspect, without a URL scheme."
          },
          "dkimSelectors": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Dkim Selectors item value for DNS SSL Email Launch Check."
            },
            "maxItems": 10,
            "description": "Optional DKIM selectors to check, such as google or selector1."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "domain"
        ],
        "optional": [
          "dkimSelectors"
        ],
        "fields": [
          {
            "name": "domain",
            "type": "string",
            "required": true,
            "description": "Domain name to inspect, without a URL scheme.",
            "constraints": {
              "minLength": 1
            }
          },
          {
            "name": "dkimSelectors",
            "type": "array",
            "required": false,
            "description": "Optional DKIM selectors to check, such as google or selector1.",
            "constraints": {
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "domain": "example.com",
          "dkimSelectors": [
            "google",
            "selector1"
          ]
        }
      },
      "exampleRequest": {
        "domain": "example.com",
        "dkimSelectors": [
          "google",
          "selector1"
        ]
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "domain": "example.com",
        "summary": {
          "status": "pass",
          "score": 92
        },
        "checks": [
          {
            "name": "https",
            "status": "pass"
          },
          {
            "name": "spf",
            "status": "pass"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "domain": "example.com",
                "dkimSelectors": [
                  "google",
                  "selector1"
                ]
              }
            },
            "output": {
              "type": "json",
              "example": {
                "domain": "example.com",
                "summary": {
                  "status": "pass",
                  "score": 92
                },
                "checks": [
                  {
                    "name": "https",
                    "status": "pass"
                  },
                  {
                    "name": "spf",
                    "status": "pass"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/check/domain",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "domain"
                    ],
                    "properties": {
                      "domain": {
                        "type": "string",
                        "minLength": 1,
                        "description": "Domain name to inspect, without a URL scheme."
                      },
                      "dkimSelectors": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Dkim Selectors item value for DNS SSL Email Launch Check."
                        },
                        "maxItems": 10,
                        "description": "Optional DKIM selectors to check, such as google or selector1."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "domain-launch-check",
            "url": "https://agentbodega.store/api/check/domain",
            "method": "POST",
            "description": "Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.",
            "longDescription": "Purpose: Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nBest use: Use this when an agent needs check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: domain.\nOptional fields: dkimSelectors.\n\nAccepted fields:\n- domain (required, string): Domain name to inspect, without a URL scheme. Constraints: min length: 1.\n- dkimSelectors (optional, array): Optional DKIM selectors to check, such as google or selector1. Constraints: max items: 10.\n\nExample request body:\n```json\n{\n  \"domain\": \"example.com\",\n  \"dkimSelectors\": [\n    \"google\",\n    \"selector1\"\n  ]\n}\n```",
            "mimeType": "application/json",
            "serviceName": "DNS SSL Email Launch Check",
            "category": "launch-checks",
            "kind": "utility",
            "tags": [
              "dns",
              "ssl",
              "email",
              "deliverability",
              "launch-check"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "domain"
              ],
              "optional": [
                "dkimSelectors"
              ],
              "fields": [
                {
                  "name": "domain",
                  "type": "string",
                  "required": true,
                  "description": "Domain name to inspect, without a URL scheme.",
                  "constraints": {
                    "minLength": 1
                  }
                },
                {
                  "name": "dkimSelectors",
                  "type": "array",
                  "required": false,
                  "description": "Optional DKIM selectors to check, such as google or selector1.",
                  "constraints": {
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "domain": "example.com",
                "dkimSelectors": [
                  "google",
                  "selector1"
                ]
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "domain"
              ],
              "properties": {
                "domain": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Domain name to inspect, without a URL scheme."
                },
                "dkimSelectors": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Dkim Selectors item value for DNS SSL Email Launch Check."
                  },
                  "maxItems": 10,
                  "description": "Optional DKIM selectors to check, such as google or selector1."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.02"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.02",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/check/domain",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.02"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/check/domain",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "launch-checks",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "launch-checks",
          "department": "Launch Checks",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "utility",
          "shelf": "Utility",
          "offeringId": "domain-launch-check",
          "offering": "DNS SSL Email Launch Check",
          "pathIds": [
            "launch-checks",
            "readiness-audits",
            "utility",
            "domain-launch-check"
          ],
          "pathLabels": [
            "Launch Checks",
            "Readiness Audits",
            "Utility",
            "DNS SSL Email Launch Check"
          ],
          "taxonomyPath": "launch-checks.readiness-audits.utility.domain-launch-check",
          "layout": {
            "department": {
              "id": "launch-checks",
              "name": "Launch Checks"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "utility",
              "name": "Utility"
            },
            "offering": {
              "id": "domain-launch-check",
              "name": "DNS SSL Email Launch Check"
            },
            "pathIds": [
              "launch-checks",
              "readiness-audits",
              "utility",
              "domain-launch-check"
            ],
            "pathLabels": [
              "Launch Checks",
              "Readiness Audits",
              "Utility",
              "DNS SSL Email Launch Check"
            ]
          }
        },
        "description": {
          "short": "Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.",
          "full": "Purpose: Check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nBest use: Use this when an agent needs check a domain's launch basics: DNS resolution, HTTPS reachability, MX, SPF, DMARC, CAA, and optional DKIM selectors.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: domain.\nOptional fields: dkimSelectors.\n\nAccepted fields:\n- domain (required, string): Domain name to inspect, without a URL scheme. Constraints: min length: 1.\n- dkimSelectors (optional, array): Optional DKIM selectors to check, such as google or selector1. Constraints: max items: 10.\n\nExample request body:\n```json\n{\n  \"domain\": \"example.com\",\n  \"dkimSelectors\": [\n    \"google\",\n    \"selector1\"\n  ]\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "domain"
          ],
          "properties": {
            "domain": {
              "type": "string",
              "minLength": 1,
              "description": "Domain name to inspect, without a URL scheme."
            },
            "dkimSelectors": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Dkim Selectors item value for DNS SSL Email Launch Check."
              },
              "maxItems": 10,
              "description": "Optional DKIM selectors to check, such as google or selector1."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "domain"
          ],
          "properties": {
            "domain": {
              "type": "string",
              "minLength": 1,
              "description": "Domain name to inspect, without a URL scheme."
            },
            "dkimSelectors": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Dkim Selectors item value for DNS SSL Email Launch Check."
              },
              "maxItems": 10,
              "description": "Optional DKIM selectors to check, such as google or selector1."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "domain"
          ],
          "optional": [
            "dkimSelectors"
          ],
          "fields": [
            {
              "name": "domain",
              "type": "string",
              "required": true,
              "description": "Domain name to inspect, without a URL scheme.",
              "constraints": {
                "minLength": 1
              }
            },
            {
              "name": "dkimSelectors",
              "type": "array",
              "required": false,
              "description": "Optional DKIM selectors to check, such as google or selector1.",
              "constraints": {
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "domain": "example.com",
            "dkimSelectors": [
              "google",
              "selector1"
            ]
          }
        },
        "exampleRequest": {
          "domain": "example.com",
          "dkimSelectors": [
            "google",
            "selector1"
          ]
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "domain": "example.com",
          "summary": {
            "status": "pass",
            "score": 92
          },
          "checks": [
            {
              "name": "https",
              "status": "pass"
            },
            {
              "name": "spf",
              "status": "pass"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/name/check",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Name Availability Check",
      "description": "Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.",
      "longDescription": "Purpose: Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nBest use: Use this when an agent needs check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: candidate.\nOptional fields: tlds, handles, includeWarnings.\n\nAccepted fields:\n- candidate (required, string): Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @. Constraints: min length: 1; max length: 80.\n- tlds (optional, array): Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing. Constraints: default: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"; max items: 10.\n- handles (optional, array): Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here. Constraints: default: \"github\"; max items: 1.\n- includeWarnings (optional, boolean): Include actionability and legal/ownership warnings in the response. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"candidate\": \"agentbodega\",\n  \"tlds\": [\n    \"com\",\n    \"dev\"\n  ],\n  \"handles\": [\n    \"github\"\n  ],\n  \"includeWarnings\": true\n}\n```",
      "category": "launch-checks",
      "kind": "name-availability-tool",
      "departmentId": "launch-checks",
      "department": "Launch Checks",
      "aisleId": "name-availability",
      "aisle": "Name Availability",
      "shelfId": "quick-checks",
      "shelf": "Quick Checks",
      "offeringId": "name-availability-check",
      "offering": "Name Availability Check",
      "pathIds": [
        "launch-checks",
        "name-availability",
        "quick-checks",
        "name-availability-check"
      ],
      "pathLabels": [
        "Launch Checks",
        "Name Availability",
        "Quick Checks",
        "Name Availability Check"
      ],
      "taxonomyPath": "launch-checks.name-availability.quick-checks.name-availability-check",
      "layout": {
        "department": {
          "id": "launch-checks",
          "name": "Launch Checks"
        },
        "aisle": {
          "id": "name-availability",
          "name": "Name Availability"
        },
        "shelf": {
          "id": "quick-checks",
          "name": "Quick Checks"
        },
        "offering": {
          "id": "name-availability-check",
          "name": "Name Availability Check"
        },
        "pathIds": [
          "launch-checks",
          "name-availability",
          "quick-checks",
          "name-availability-check"
        ],
        "pathLabels": [
          "Launch Checks",
          "Name Availability",
          "Quick Checks",
          "Name Availability Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "name-availability",
        "domain-availability",
        "github",
        "brand-check",
        "launch-check",
        "agent-tools",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "5000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "5000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "candidate"
        ],
        "properties": {
          "candidate": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @."
          },
          "tlds": {
            "type": "array",
            "maxItems": 10,
            "default": [
              "com",
              "ai",
              "dev",
              "app",
              "io",
              "co",
              "net",
              "org",
              "xyz",
              "store"
            ],
            "items": {
              "type": "string",
              "enum": [
                "com",
                "ai",
                "dev",
                "app",
                "io",
                "co",
                "net",
                "org",
                "xyz",
                "store"
              ],
              "description": "Tlds item filter for Name Availability Check. Accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\". Constraints: accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"."
            },
            "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing."
          },
          "handles": {
            "type": "array",
            "maxItems": 1,
            "default": [
              "github"
            ],
            "items": {
              "type": "string",
              "enum": [
                "github"
              ],
              "description": "Handles item filter for Name Availability Check. Accepted values: \"github\". Constraints: accepted values: \"github\"."
            },
            "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here."
          },
          "includeWarnings": {
            "type": "boolean",
            "default": true,
            "description": "Include actionability and legal/ownership warnings in the response."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "candidate"
        ],
        "optional": [
          "tlds",
          "handles",
          "includeWarnings"
        ],
        "fields": [
          {
            "name": "candidate",
            "type": "string",
            "required": true,
            "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @.",
            "constraints": {
              "minLength": 1,
              "maxLength": 80
            }
          },
          {
            "name": "tlds",
            "type": "array",
            "required": false,
            "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing.",
            "constraints": {
              "default": [
                "com",
                "ai",
                "dev",
                "app",
                "io",
                "co",
                "net",
                "org",
                "xyz",
                "store"
              ],
              "maxItems": 10
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "handles",
            "type": "array",
            "required": false,
            "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here.",
            "constraints": {
              "default": [
                "github"
              ],
              "maxItems": 1
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "includeWarnings",
            "type": "boolean",
            "required": false,
            "description": "Include actionability and legal/ownership warnings in the response.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "candidate": "agentbodega",
          "tlds": [
            "com",
            "dev"
          ],
          "handles": [
            "github"
          ],
          "includeWarnings": true
        }
      },
      "exampleRequest": {
        "candidate": "agentbodega",
        "tlds": [
          "com",
          "dev"
        ],
        "handles": [
          "github"
        ],
        "includeWarnings": true
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "success",
          "tool",
          "candidate",
          "checkedAt",
          "summary",
          "domains",
          "handles"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "tool": {
            "type": "object",
            "additionalProperties": true
          },
          "candidate": {
            "type": "string"
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          },
          "summary": {
            "type": "object",
            "required": [
              "recommendation",
              "domainCounts",
              "handleCounts"
            ],
            "properties": {
              "recommendation": {
                "type": "string",
                "enum": [
                  "shortlist",
                  "review",
                  "avoid"
                ]
              },
              "domainCounts": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "handleCounts": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "highConfidenceOnly": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          },
          "domains": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "domain",
                "tld",
                "status",
                "confidence",
                "source",
                "checkedAt"
              ],
              "properties": {
                "domain": {
                  "type": "string"
                },
                "tld": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "available",
                    "taken",
                    "unknown"
                  ]
                },
                "confidence": {
                  "type": "string",
                  "enum": [
                    "high",
                    "low"
                  ]
                },
                "source": {
                  "type": "string"
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "evidence": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          },
          "handles": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "platform",
                "handle",
                "status",
                "confidence",
                "source",
                "checkedAt"
              ],
              "properties": {
                "platform": {
                  "type": "string",
                  "enum": [
                    "github"
                  ]
                },
                "handle": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "available",
                    "taken",
                    "unknown",
                    "invalid"
                  ]
                },
                "confidence": {
                  "type": "string",
                  "enum": [
                    "high",
                    "low"
                  ]
                },
                "source": {
                  "type": "string"
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "evidence": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true
      },
      "outputExample": {
        "success": true,
        "tool": {
          "id": "name-availability-check",
          "name": "Name Availability Check",
          "department": "Launch Checks",
          "highConfidenceOnly": true
        },
        "candidate": "agentbodega",
        "checkedAt": "2026-07-09T00:00:00.000Z",
        "summary": {
          "recommendation": "shortlist",
          "domainCounts": {
            "available": 1,
            "taken": 1,
            "unknown": 0
          },
          "handleCounts": {
            "available": 1,
            "taken": 0,
            "unknown": 0,
            "invalid": 0
          },
          "highConfidenceOnly": true
        },
        "domains": [
          {
            "domain": "agentbodega.com",
            "tld": "com",
            "status": "taken",
            "confidence": "high",
            "source": "dns_resolution",
            "checkedAt": "2026-07-09T00:00:00.000Z"
          },
          {
            "domain": "agentbodega.dev",
            "tld": "dev",
            "status": "available",
            "confidence": "high",
            "source": "rdap_not_found",
            "checkedAt": "2026-07-09T00:00:00.000Z"
          }
        ],
        "handles": [
          {
            "platform": "github",
            "handle": "agentbodega",
            "status": "available",
            "confidence": "high",
            "source": "http_not_found",
            "checkedAt": "2026-07-09T00:00:00.000Z"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "candidate": "agentbodega",
                "tlds": [
                  "com",
                  "dev"
                ],
                "handles": [
                  "github"
                ],
                "includeWarnings": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "success": true,
                "tool": {
                  "id": "name-availability-check",
                  "name": "Name Availability Check",
                  "department": "Launch Checks",
                  "highConfidenceOnly": true
                },
                "candidate": "agentbodega",
                "checkedAt": "2026-07-09T00:00:00.000Z",
                "summary": {
                  "recommendation": "shortlist",
                  "domainCounts": {
                    "available": 1,
                    "taken": 1,
                    "unknown": 0
                  },
                  "handleCounts": {
                    "available": 1,
                    "taken": 0,
                    "unknown": 0,
                    "invalid": 0
                  },
                  "highConfidenceOnly": true
                },
                "domains": [
                  {
                    "domain": "agentbodega.com",
                    "tld": "com",
                    "status": "taken",
                    "confidence": "high",
                    "source": "dns_resolution",
                    "checkedAt": "2026-07-09T00:00:00.000Z"
                  },
                  {
                    "domain": "agentbodega.dev",
                    "tld": "dev",
                    "status": "available",
                    "confidence": "high",
                    "source": "rdap_not_found",
                    "checkedAt": "2026-07-09T00:00:00.000Z"
                  }
                ],
                "handles": [
                  {
                    "platform": "github",
                    "handle": "agentbodega",
                    "status": "available",
                    "confidence": "high",
                    "source": "http_not_found",
                    "checkedAt": "2026-07-09T00:00:00.000Z"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/name/check",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "candidate"
                    ],
                    "properties": {
                      "candidate": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80,
                        "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @."
                      },
                      "tlds": {
                        "type": "array",
                        "maxItems": 10,
                        "default": [
                          "com",
                          "ai",
                          "dev",
                          "app",
                          "io",
                          "co",
                          "net",
                          "org",
                          "xyz",
                          "store"
                        ],
                        "items": {
                          "type": "string",
                          "enum": [
                            "com",
                            "ai",
                            "dev",
                            "app",
                            "io",
                            "co",
                            "net",
                            "org",
                            "xyz",
                            "store"
                          ],
                          "description": "Tlds item filter for Name Availability Check. Accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\". Constraints: accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"."
                        },
                        "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing."
                      },
                      "handles": {
                        "type": "array",
                        "maxItems": 1,
                        "default": [
                          "github"
                        ],
                        "items": {
                          "type": "string",
                          "enum": [
                            "github"
                          ],
                          "description": "Handles item filter for Name Availability Check. Accepted values: \"github\". Constraints: accepted values: \"github\"."
                        },
                        "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here."
                      },
                      "includeWarnings": {
                        "type": "boolean",
                        "default": true,
                        "description": "Include actionability and legal/ownership warnings in the response."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "success",
                      "tool",
                      "candidate",
                      "checkedAt",
                      "summary",
                      "domains",
                      "handles"
                    ],
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "tool": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "candidate": {
                        "type": "string"
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "summary": {
                        "type": "object",
                        "required": [
                          "recommendation",
                          "domainCounts",
                          "handleCounts"
                        ],
                        "properties": {
                          "recommendation": {
                            "type": "string",
                            "enum": [
                              "shortlist",
                              "review",
                              "avoid"
                            ]
                          },
                          "domainCounts": {
                            "type": "object",
                            "additionalProperties": {
                              "type": "integer"
                            }
                          },
                          "handleCounts": {
                            "type": "object",
                            "additionalProperties": {
                              "type": "integer"
                            }
                          },
                          "highConfidenceOnly": {
                            "type": "boolean"
                          }
                        },
                        "additionalProperties": true
                      },
                      "domains": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "domain",
                            "tld",
                            "status",
                            "confidence",
                            "source",
                            "checkedAt"
                          ],
                          "properties": {
                            "domain": {
                              "type": "string"
                            },
                            "tld": {
                              "type": "string"
                            },
                            "status": {
                              "type": "string",
                              "enum": [
                                "available",
                                "taken",
                                "unknown"
                              ]
                            },
                            "confidence": {
                              "type": "string",
                              "enum": [
                                "high",
                                "low"
                              ]
                            },
                            "source": {
                              "type": "string"
                            },
                            "checkedAt": {
                              "type": "string",
                              "format": "date-time"
                            },
                            "evidence": {
                              "type": "object",
                              "additionalProperties": true
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "handles": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "platform",
                            "handle",
                            "status",
                            "confidence",
                            "source",
                            "checkedAt"
                          ],
                          "properties": {
                            "platform": {
                              "type": "string",
                              "enum": [
                                "github"
                              ]
                            },
                            "handle": {
                              "type": "string"
                            },
                            "status": {
                              "type": "string",
                              "enum": [
                                "available",
                                "taken",
                                "unknown",
                                "invalid"
                              ]
                            },
                            "confidence": {
                              "type": "string",
                              "enum": [
                                "high",
                                "low"
                              ]
                            },
                            "source": {
                              "type": "string"
                            },
                            "checkedAt": {
                              "type": "string",
                              "format": "date-time"
                            },
                            "evidence": {
                              "type": "object",
                              "additionalProperties": true
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "warnings": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "name-availability-check",
            "url": "https://agentbodega.store/api/name/check",
            "method": "POST",
            "description": "Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.",
            "longDescription": "Purpose: Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nBest use: Use this when an agent needs check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: candidate.\nOptional fields: tlds, handles, includeWarnings.\n\nAccepted fields:\n- candidate (required, string): Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @. Constraints: min length: 1; max length: 80.\n- tlds (optional, array): Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing. Constraints: default: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"; max items: 10.\n- handles (optional, array): Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here. Constraints: default: \"github\"; max items: 1.\n- includeWarnings (optional, boolean): Include actionability and legal/ownership warnings in the response. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"candidate\": \"agentbodega\",\n  \"tlds\": [\n    \"com\",\n    \"dev\"\n  ],\n  \"handles\": [\n    \"github\"\n  ],\n  \"includeWarnings\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Name Availability Check",
            "category": "launch-checks",
            "kind": "name-availability-tool",
            "tags": [
              "name-availability",
              "domain-availability",
              "github",
              "brand-check",
              "launch-check",
              "agent-tools",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "candidate"
              ],
              "optional": [
                "tlds",
                "handles",
                "includeWarnings"
              ],
              "fields": [
                {
                  "name": "candidate",
                  "type": "string",
                  "required": true,
                  "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @.",
                  "constraints": {
                    "minLength": 1,
                    "maxLength": 80
                  }
                },
                {
                  "name": "tlds",
                  "type": "array",
                  "required": false,
                  "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing.",
                  "constraints": {
                    "default": [
                      "com",
                      "ai",
                      "dev",
                      "app",
                      "io",
                      "co",
                      "net",
                      "org",
                      "xyz",
                      "store"
                    ],
                    "maxItems": 10
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "handles",
                  "type": "array",
                  "required": false,
                  "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here.",
                  "constraints": {
                    "default": [
                      "github"
                    ],
                    "maxItems": 1
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "includeWarnings",
                  "type": "boolean",
                  "required": false,
                  "description": "Include actionability and legal/ownership warnings in the response.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "candidate": "agentbodega",
                "tlds": [
                  "com",
                  "dev"
                ],
                "handles": [
                  "github"
                ],
                "includeWarnings": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "candidate"
              ],
              "properties": {
                "candidate": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 80,
                  "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @."
                },
                "tlds": {
                  "type": "array",
                  "maxItems": 10,
                  "default": [
                    "com",
                    "ai",
                    "dev",
                    "app",
                    "io",
                    "co",
                    "net",
                    "org",
                    "xyz",
                    "store"
                  ],
                  "items": {
                    "type": "string",
                    "enum": [
                      "com",
                      "ai",
                      "dev",
                      "app",
                      "io",
                      "co",
                      "net",
                      "org",
                      "xyz",
                      "store"
                    ],
                    "description": "Tlds item filter for Name Availability Check. Accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\". Constraints: accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"."
                  },
                  "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing."
                },
                "handles": {
                  "type": "array",
                  "maxItems": 1,
                  "default": [
                    "github"
                  ],
                  "items": {
                    "type": "string",
                    "enum": [
                      "github"
                    ],
                    "description": "Handles item filter for Name Availability Check. Accepted values: \"github\". Constraints: accepted values: \"github\"."
                  },
                  "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here."
                },
                "includeWarnings": {
                  "type": "boolean",
                  "default": true,
                  "description": "Include actionability and legal/ownership warnings in the response."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "success",
                "tool",
                "candidate",
                "checkedAt",
                "summary",
                "domains",
                "handles"
              ],
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "tool": {
                  "type": "object",
                  "additionalProperties": true
                },
                "candidate": {
                  "type": "string"
                },
                "checkedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "summary": {
                  "type": "object",
                  "required": [
                    "recommendation",
                    "domainCounts",
                    "handleCounts"
                  ],
                  "properties": {
                    "recommendation": {
                      "type": "string",
                      "enum": [
                        "shortlist",
                        "review",
                        "avoid"
                      ]
                    },
                    "domainCounts": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "integer"
                      }
                    },
                    "handleCounts": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "integer"
                      }
                    },
                    "highConfidenceOnly": {
                      "type": "boolean"
                    }
                  },
                  "additionalProperties": true
                },
                "domains": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "domain",
                      "tld",
                      "status",
                      "confidence",
                      "source",
                      "checkedAt"
                    ],
                    "properties": {
                      "domain": {
                        "type": "string"
                      },
                      "tld": {
                        "type": "string"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "available",
                          "taken",
                          "unknown"
                        ]
                      },
                      "confidence": {
                        "type": "string",
                        "enum": [
                          "high",
                          "low"
                        ]
                      },
                      "source": {
                        "type": "string"
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "evidence": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "handles": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "platform",
                      "handle",
                      "status",
                      "confidence",
                      "source",
                      "checkedAt"
                    ],
                    "properties": {
                      "platform": {
                        "type": "string",
                        "enum": [
                          "github"
                        ]
                      },
                      "handle": {
                        "type": "string"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "available",
                          "taken",
                          "unknown",
                          "invalid"
                        ]
                      },
                      "confidence": {
                        "type": "string",
                        "enum": [
                          "high",
                          "low"
                        ]
                      },
                      "source": {
                        "type": "string"
                      },
                      "checkedAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "evidence": {
                        "type": "object",
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.005"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.005",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/name/check",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.005"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/name/check",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "launch-checks",
        "kind": "name-availability-tool",
        "taxonomy": {
          "departmentId": "launch-checks",
          "department": "Launch Checks",
          "aisleId": "name-availability",
          "aisle": "Name Availability",
          "shelfId": "quick-checks",
          "shelf": "Quick Checks",
          "offeringId": "name-availability-check",
          "offering": "Name Availability Check",
          "pathIds": [
            "launch-checks",
            "name-availability",
            "quick-checks",
            "name-availability-check"
          ],
          "pathLabels": [
            "Launch Checks",
            "Name Availability",
            "Quick Checks",
            "Name Availability Check"
          ],
          "taxonomyPath": "launch-checks.name-availability.quick-checks.name-availability-check",
          "layout": {
            "department": {
              "id": "launch-checks",
              "name": "Launch Checks"
            },
            "aisle": {
              "id": "name-availability",
              "name": "Name Availability"
            },
            "shelf": {
              "id": "quick-checks",
              "name": "Quick Checks"
            },
            "offering": {
              "id": "name-availability-check",
              "name": "Name Availability Check"
            },
            "pathIds": [
              "launch-checks",
              "name-availability",
              "quick-checks",
              "name-availability-check"
            ],
            "pathLabels": [
              "Launch Checks",
              "Name Availability",
              "Quick Checks",
              "Name Availability Check"
            ]
          }
        },
        "description": {
          "short": "Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.",
          "full": "Purpose: Check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nBest use: Use this when an agent needs check one launch-name slug against selected public domain TLDs and GitHub handles, returning available, taken, invalid, or unknown with evidence and confidence instead of guessing.\nPrice: $0.005 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: candidate.\nOptional fields: tlds, handles, includeWarnings.\n\nAccepted fields:\n- candidate (required, string): Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @. Constraints: min length: 1; max length: 80.\n- tlds (optional, array): Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing. Constraints: default: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"; max items: 10.\n- handles (optional, array): Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here. Constraints: default: \"github\"; max items: 1.\n- includeWarnings (optional, boolean): Include actionability and legal/ownership warnings in the response. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"candidate\": \"agentbodega\",\n  \"tlds\": [\n    \"com\",\n    \"dev\"\n  ],\n  \"handles\": [\n    \"github\"\n  ],\n  \"includeWarnings\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "candidate"
          ],
          "properties": {
            "candidate": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @."
            },
            "tlds": {
              "type": "array",
              "maxItems": 10,
              "default": [
                "com",
                "ai",
                "dev",
                "app",
                "io",
                "co",
                "net",
                "org",
                "xyz",
                "store"
              ],
              "items": {
                "type": "string",
                "enum": [
                  "com",
                  "ai",
                  "dev",
                  "app",
                  "io",
                  "co",
                  "net",
                  "org",
                  "xyz",
                  "store"
                ],
                "description": "Tlds item filter for Name Availability Check. Accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\". Constraints: accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"."
              },
              "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing."
            },
            "handles": {
              "type": "array",
              "maxItems": 1,
              "default": [
                "github"
              ],
              "items": {
                "type": "string",
                "enum": [
                  "github"
                ],
                "description": "Handles item filter for Name Availability Check. Accepted values: \"github\". Constraints: accepted values: \"github\"."
              },
              "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here."
            },
            "includeWarnings": {
              "type": "boolean",
              "default": true,
              "description": "Include actionability and legal/ownership warnings in the response."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "candidate"
          ],
          "properties": {
            "candidate": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @."
            },
            "tlds": {
              "type": "array",
              "maxItems": 10,
              "default": [
                "com",
                "ai",
                "dev",
                "app",
                "io",
                "co",
                "net",
                "org",
                "xyz",
                "store"
              ],
              "items": {
                "type": "string",
                "enum": [
                  "com",
                  "ai",
                  "dev",
                  "app",
                  "io",
                  "co",
                  "net",
                  "org",
                  "xyz",
                  "store"
                ],
                "description": "Tlds item filter for Name Availability Check. Accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\". Constraints: accepted values: \"com\", \"ai\", \"dev\", \"app\", \"io\", \"co\", \"net\", \"org\", \"xyz\", \"store\"."
              },
              "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing."
            },
            "handles": {
              "type": "array",
              "maxItems": 1,
              "default": [
                "github"
              ],
              "items": {
                "type": "string",
                "enum": [
                  "github"
                ],
                "description": "Handles item filter for Name Availability Check. Accepted values: \"github\". Constraints: accepted values: \"github\"."
              },
              "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here."
            },
            "includeWarnings": {
              "type": "boolean",
              "default": true,
              "description": "Include actionability and legal/ownership warnings in the response."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "candidate"
          ],
          "optional": [
            "tlds",
            "handles",
            "includeWarnings"
          ],
          "fields": [
            {
              "name": "candidate",
              "type": "string",
              "required": true,
              "description": "Required launch-name slug to check. Use lowercase letters, numbers, and hyphens only; no spaces, underscores, URL schemes, or leading @.",
              "constraints": {
                "minLength": 1,
                "maxLength": 80
              }
            },
            {
              "name": "tlds",
              "type": "array",
              "required": false,
              "description": "Domain TLDs to check. This endpoint only accepts delegated TLDs with reliable public RDAP coverage, and rejects unsupported TLDs instead of guessing.",
              "constraints": {
                "default": [
                  "com",
                  "ai",
                  "dev",
                  "app",
                  "io",
                  "co",
                  "net",
                  "org",
                  "xyz",
                  "store"
                ],
                "maxItems": 10
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "handles",
              "type": "array",
              "required": false,
              "description": "Developer handle platforms to check. MVP coverage is GitHub only; browser-heavy social handle checks are separate future routes and are not advertised here.",
              "constraints": {
                "default": [
                  "github"
                ],
                "maxItems": 1
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "includeWarnings",
              "type": "boolean",
              "required": false,
              "description": "Include actionability and legal/ownership warnings in the response.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "candidate": "agentbodega",
            "tlds": [
              "com",
              "dev"
            ],
            "handles": [
              "github"
            ],
            "includeWarnings": true
          }
        },
        "exampleRequest": {
          "candidate": "agentbodega",
          "tlds": [
            "com",
            "dev"
          ],
          "handles": [
            "github"
          ],
          "includeWarnings": true
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "candidate",
            "checkedAt",
            "summary",
            "domains",
            "handles"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "candidate": {
              "type": "string"
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            },
            "summary": {
              "type": "object",
              "required": [
                "recommendation",
                "domainCounts",
                "handleCounts"
              ],
              "properties": {
                "recommendation": {
                  "type": "string",
                  "enum": [
                    "shortlist",
                    "review",
                    "avoid"
                  ]
                },
                "domainCounts": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  }
                },
                "handleCounts": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  }
                },
                "highConfidenceOnly": {
                  "type": "boolean"
                }
              },
              "additionalProperties": true
            },
            "domains": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "domain",
                  "tld",
                  "status",
                  "confidence",
                  "source",
                  "checkedAt"
                ],
                "properties": {
                  "domain": {
                    "type": "string"
                  },
                  "tld": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "available",
                      "taken",
                      "unknown"
                    ]
                  },
                  "confidence": {
                    "type": "string",
                    "enum": [
                      "high",
                      "low"
                    ]
                  },
                  "source": {
                    "type": "string"
                  },
                  "checkedAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "evidence": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "additionalProperties": true
              }
            },
            "handles": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "platform",
                  "handle",
                  "status",
                  "confidence",
                  "source",
                  "checkedAt"
                ],
                "properties": {
                  "platform": {
                    "type": "string",
                    "enum": [
                      "github"
                    ]
                  },
                  "handle": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "available",
                      "taken",
                      "unknown",
                      "invalid"
                    ]
                  },
                  "confidence": {
                    "type": "string",
                    "enum": [
                      "high",
                      "low"
                    ]
                  },
                  "source": {
                    "type": "string"
                  },
                  "checkedAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "evidence": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "additionalProperties": true
              }
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "required": [
            "success",
            "tool",
            "candidate",
            "checkedAt",
            "summary",
            "domains",
            "handles"
          ],
          "properties": {
            "success": {
              "type": "boolean"
            },
            "tool": {
              "type": "object",
              "additionalProperties": true
            },
            "candidate": {
              "type": "string"
            },
            "checkedAt": {
              "type": "string",
              "format": "date-time"
            },
            "summary": {
              "type": "object",
              "required": [
                "recommendation",
                "domainCounts",
                "handleCounts"
              ],
              "properties": {
                "recommendation": {
                  "type": "string",
                  "enum": [
                    "shortlist",
                    "review",
                    "avoid"
                  ]
                },
                "domainCounts": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  }
                },
                "handleCounts": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "integer"
                  }
                },
                "highConfidenceOnly": {
                  "type": "boolean"
                }
              },
              "additionalProperties": true
            },
            "domains": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "domain",
                  "tld",
                  "status",
                  "confidence",
                  "source",
                  "checkedAt"
                ],
                "properties": {
                  "domain": {
                    "type": "string"
                  },
                  "tld": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "available",
                      "taken",
                      "unknown"
                    ]
                  },
                  "confidence": {
                    "type": "string",
                    "enum": [
                      "high",
                      "low"
                    ]
                  },
                  "source": {
                    "type": "string"
                  },
                  "checkedAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "evidence": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "additionalProperties": true
              }
            },
            "handles": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "platform",
                  "handle",
                  "status",
                  "confidence",
                  "source",
                  "checkedAt"
                ],
                "properties": {
                  "platform": {
                    "type": "string",
                    "enum": [
                      "github"
                    ]
                  },
                  "handle": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "available",
                      "taken",
                      "unknown",
                      "invalid"
                    ]
                  },
                  "confidence": {
                    "type": "string",
                    "enum": [
                      "high",
                      "low"
                    ]
                  },
                  "source": {
                    "type": "string"
                  },
                  "checkedAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "evidence": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "additionalProperties": true
              }
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": true
        },
        "outputExample": {
          "success": true,
          "tool": {
            "id": "name-availability-check",
            "name": "Name Availability Check",
            "department": "Launch Checks",
            "highConfidenceOnly": true
          },
          "candidate": "agentbodega",
          "checkedAt": "2026-07-09T00:00:00.000Z",
          "summary": {
            "recommendation": "shortlist",
            "domainCounts": {
              "available": 1,
              "taken": 1,
              "unknown": 0
            },
            "handleCounts": {
              "available": 1,
              "taken": 0,
              "unknown": 0,
              "invalid": 0
            },
            "highConfidenceOnly": true
          },
          "domains": [
            {
              "domain": "agentbodega.com",
              "tld": "com",
              "status": "taken",
              "confidence": "high",
              "source": "dns_resolution",
              "checkedAt": "2026-07-09T00:00:00.000Z"
            },
            {
              "domain": "agentbodega.dev",
              "tld": "dev",
              "status": "available",
              "confidence": "high",
              "source": "rdap_not_found",
              "checkedAt": "2026-07-09T00:00:00.000Z"
            }
          ],
          "handles": [
            {
              "platform": "github",
              "handle": "agentbodega",
              "status": "available",
              "confidence": "high",
              "source": "http_not_found",
              "checkedAt": "2026-07-09T00:00:00.000Z"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/artifacts",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Temporary Hosted Artifact",
      "description": "Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.",
      "longDescription": "Purpose: Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nBest use: Use this when an agent needs create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: kind, content.\nOptional fields: contentType, ttlSeconds, filename.\n\nAccepted fields:\n- kind (required, string): Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".\n- content (required, any): Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json.\n- contentType (optional, string): Optional MIME type override.\n- ttlSeconds (optional, integer): Artifact lifetime in seconds. Constraints: default: 86400; min: 60; max: 604800.\n- filename (optional, string): Optional display filename. Constraints: max length: 120.\n\nExample request body:\n```json\n{\n  \"kind\": \"json\",\n  \"content\": {\n    \"ok\": true,\n    \"message\": \"hello agent\"\n  },\n  \"ttlSeconds\": 3600\n}\n```",
      "category": "agent-utilities",
      "kind": "http-json",
      "departmentId": "agent-utilities",
      "department": "Agent Utilities",
      "aisleId": "agent-artifacts",
      "aisle": "Agent Artifacts",
      "offeringId": "hosted-artifact",
      "offering": "Temporary Hosted Artifact",
      "pathIds": [
        "agent-utilities",
        "agent-artifacts",
        "hosted-artifact"
      ],
      "pathLabels": [
        "Agent Utilities",
        "Agent Artifacts",
        "Temporary Hosted Artifact"
      ],
      "taxonomyPath": "agent-utilities.agent-artifacts.hosted-artifact",
      "layout": {
        "department": {
          "id": "agent-utilities",
          "name": "Agent Utilities"
        },
        "aisle": {
          "id": "agent-artifacts",
          "name": "Agent Artifacts"
        },
        "offering": {
          "id": "hosted-artifact",
          "name": "Temporary Hosted Artifact"
        },
        "pathIds": [
          "agent-utilities",
          "agent-artifacts",
          "hosted-artifact"
        ],
        "pathLabels": [
          "Agent Utilities",
          "Agent Artifacts",
          "Temporary Hosted Artifact"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "artifact-hosting",
        "webhook-bin",
        "signed-url",
        "agent-tools"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "kind",
          "content"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "text",
              "json",
              "svg",
              "redirect"
            ],
            "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\"."
          },
          "content": {
            "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
          },
          "contentType": {
            "type": "string",
            "description": "Optional MIME type override."
          },
          "ttlSeconds": {
            "type": "integer",
            "minimum": 60,
            "maximum": 604800,
            "default": 86400,
            "description": "Artifact lifetime in seconds."
          },
          "filename": {
            "type": "string",
            "maxLength": 120,
            "description": "Optional display filename."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "kind",
          "content"
        ],
        "optional": [
          "contentType",
          "ttlSeconds",
          "filename"
        ],
        "fields": [
          {
            "name": "kind",
            "type": "string",
            "required": true,
            "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".",
            "constraints": {
              "enum": [
                "text",
                "json",
                "svg",
                "redirect"
              ]
            }
          },
          {
            "name": "content",
            "type": "any",
            "required": true,
            "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
          },
          {
            "name": "contentType",
            "type": "string",
            "required": false,
            "description": "Optional MIME type override."
          },
          {
            "name": "ttlSeconds",
            "type": "integer",
            "required": false,
            "description": "Artifact lifetime in seconds.",
            "constraints": {
              "default": 86400,
              "minimum": 60,
              "maximum": 604800
            }
          },
          {
            "name": "filename",
            "type": "string",
            "required": false,
            "description": "Optional display filename.",
            "constraints": {
              "maxLength": 120
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "kind": "json",
          "content": {
            "ok": true,
            "message": "hello agent"
          },
          "ttlSeconds": 3600
        }
      },
      "exampleRequest": {
        "kind": "json",
        "content": {
          "ok": true,
          "message": "hello agent"
        },
        "ttlSeconds": 3600
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "artifactUrl",
          "expiresAt"
        ],
        "properties": {
          "artifactUrl": {
            "type": "string",
            "format": "uri"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "outputExample": {
        "artifactUrl": "signed hosted URL",
        "expiresAt": "2026-07-04T16:00:00.000Z",
        "bytes": 128
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "kind": "json",
                "content": {
                  "ok": true,
                  "message": "hello agent"
                },
                "ttlSeconds": 3600
              }
            },
            "output": {
              "type": "json",
              "example": {
                "artifactUrl": "signed hosted URL",
                "expiresAt": "2026-07-04T16:00:00.000Z",
                "bytes": 128
              }
            }
          },
          "routeTemplate": "/api/artifacts",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "kind",
                      "content"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "enum": [
                          "text",
                          "json",
                          "svg",
                          "redirect"
                        ],
                        "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\"."
                      },
                      "content": {
                        "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
                      },
                      "contentType": {
                        "type": "string",
                        "description": "Optional MIME type override."
                      },
                      "ttlSeconds": {
                        "type": "integer",
                        "minimum": 60,
                        "maximum": 604800,
                        "default": 86400,
                        "description": "Artifact lifetime in seconds."
                      },
                      "filename": {
                        "type": "string",
                        "maxLength": 120,
                        "description": "Optional display filename."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "required": [
                      "artifactUrl",
                      "expiresAt"
                    ],
                    "properties": {
                      "artifactUrl": {
                        "type": "string",
                        "format": "uri"
                      },
                      "expiresAt": {
                        "type": "string",
                        "format": "date-time"
                      }
                    }
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "hosted-artifact",
            "url": "https://agentbodega.store/api/artifacts",
            "method": "POST",
            "description": "Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.",
            "longDescription": "Purpose: Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nBest use: Use this when an agent needs create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: kind, content.\nOptional fields: contentType, ttlSeconds, filename.\n\nAccepted fields:\n- kind (required, string): Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".\n- content (required, any): Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json.\n- contentType (optional, string): Optional MIME type override.\n- ttlSeconds (optional, integer): Artifact lifetime in seconds. Constraints: default: 86400; min: 60; max: 604800.\n- filename (optional, string): Optional display filename. Constraints: max length: 120.\n\nExample request body:\n```json\n{\n  \"kind\": \"json\",\n  \"content\": {\n    \"ok\": true,\n    \"message\": \"hello agent\"\n  },\n  \"ttlSeconds\": 3600\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Temporary Hosted Artifact",
            "category": "agent-utilities",
            "kind": "http-json",
            "tags": [
              "artifact-hosting",
              "webhook-bin",
              "signed-url",
              "agent-tools"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "kind",
                "content"
              ],
              "optional": [
                "contentType",
                "ttlSeconds",
                "filename"
              ],
              "fields": [
                {
                  "name": "kind",
                  "type": "string",
                  "required": true,
                  "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".",
                  "constraints": {
                    "enum": [
                      "text",
                      "json",
                      "svg",
                      "redirect"
                    ]
                  }
                },
                {
                  "name": "content",
                  "type": "any",
                  "required": true,
                  "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
                },
                {
                  "name": "contentType",
                  "type": "string",
                  "required": false,
                  "description": "Optional MIME type override."
                },
                {
                  "name": "ttlSeconds",
                  "type": "integer",
                  "required": false,
                  "description": "Artifact lifetime in seconds.",
                  "constraints": {
                    "default": 86400,
                    "minimum": 60,
                    "maximum": 604800
                  }
                },
                {
                  "name": "filename",
                  "type": "string",
                  "required": false,
                  "description": "Optional display filename.",
                  "constraints": {
                    "maxLength": 120
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "kind": "json",
                "content": {
                  "ok": true,
                  "message": "hello agent"
                },
                "ttlSeconds": 3600
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "kind",
                "content"
              ],
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "text",
                    "json",
                    "svg",
                    "redirect"
                  ],
                  "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\"."
                },
                "content": {
                  "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
                },
                "contentType": {
                  "type": "string",
                  "description": "Optional MIME type override."
                },
                "ttlSeconds": {
                  "type": "integer",
                  "minimum": 60,
                  "maximum": 604800,
                  "default": 86400,
                  "description": "Artifact lifetime in seconds."
                },
                "filename": {
                  "type": "string",
                  "maxLength": 120,
                  "description": "Optional display filename."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "required": [
                "artifactUrl",
                "expiresAt"
              ],
              "properties": {
                "artifactUrl": {
                  "type": "string",
                  "format": "uri"
                },
                "expiresAt": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/artifacts",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/artifacts",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-utilities",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "agent-utilities",
          "department": "Agent Utilities",
          "aisleId": "agent-artifacts",
          "aisle": "Agent Artifacts",
          "offeringId": "hosted-artifact",
          "offering": "Temporary Hosted Artifact",
          "pathIds": [
            "agent-utilities",
            "agent-artifacts",
            "hosted-artifact"
          ],
          "pathLabels": [
            "Agent Utilities",
            "Agent Artifacts",
            "Temporary Hosted Artifact"
          ],
          "taxonomyPath": "agent-utilities.agent-artifacts.hosted-artifact",
          "layout": {
            "department": {
              "id": "agent-utilities",
              "name": "Agent Utilities"
            },
            "aisle": {
              "id": "agent-artifacts",
              "name": "Agent Artifacts"
            },
            "offering": {
              "id": "hosted-artifact",
              "name": "Temporary Hosted Artifact"
            },
            "pathIds": [
              "agent-utilities",
              "agent-artifacts",
              "hosted-artifact"
            ],
            "pathLabels": [
              "Agent Utilities",
              "Agent Artifacts",
              "Temporary Hosted Artifact"
            ]
          }
        },
        "description": {
          "short": "Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.",
          "full": "Purpose: Create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nBest use: Use this when an agent needs create a short-lived signed hosted artifact for agents: text, JSON, SVG badge, or redirect URL. No database required for small artifacts.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: kind, content.\nOptional fields: contentType, ttlSeconds, filename.\n\nAccepted fields:\n- kind (required, string): Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".\n- content (required, any): Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json.\n- contentType (optional, string): Optional MIME type override.\n- ttlSeconds (optional, integer): Artifact lifetime in seconds. Constraints: default: 86400; min: 60; max: 604800.\n- filename (optional, string): Optional display filename. Constraints: max length: 120.\n\nExample request body:\n```json\n{\n  \"kind\": \"json\",\n  \"content\": {\n    \"ok\": true,\n    \"message\": \"hello agent\"\n  },\n  \"ttlSeconds\": 3600\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "kind",
            "content"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "text",
                "json",
                "svg",
                "redirect"
              ],
              "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\"."
            },
            "content": {
              "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
            },
            "contentType": {
              "type": "string",
              "description": "Optional MIME type override."
            },
            "ttlSeconds": {
              "type": "integer",
              "minimum": 60,
              "maximum": 604800,
              "default": 86400,
              "description": "Artifact lifetime in seconds."
            },
            "filename": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional display filename."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "kind",
            "content"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "text",
                "json",
                "svg",
                "redirect"
              ],
              "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\"."
            },
            "content": {
              "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
            },
            "contentType": {
              "type": "string",
              "description": "Optional MIME type override."
            },
            "ttlSeconds": {
              "type": "integer",
              "minimum": 60,
              "maximum": 604800,
              "default": 86400,
              "description": "Artifact lifetime in seconds."
            },
            "filename": {
              "type": "string",
              "maxLength": 120,
              "description": "Optional display filename."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "kind",
            "content"
          ],
          "optional": [
            "contentType",
            "ttlSeconds",
            "filename"
          ],
          "fields": [
            {
              "name": "kind",
              "type": "string",
              "required": true,
              "description": "Kind filter for Temporary Hosted Artifact. Accepted values: \"text\", \"json\", \"svg\", \"redirect\". Constraints: accepted values: \"text\", \"json\", \"svg\", \"redirect\".",
              "constraints": {
                "enum": [
                  "text",
                  "json",
                  "svg",
                  "redirect"
                ]
              }
            },
            {
              "name": "content",
              "type": "any",
              "required": true,
              "description": "Artifact body. Use a string for text, SVG, and redirects, or any JSON value when kind is json."
            },
            {
              "name": "contentType",
              "type": "string",
              "required": false,
              "description": "Optional MIME type override."
            },
            {
              "name": "ttlSeconds",
              "type": "integer",
              "required": false,
              "description": "Artifact lifetime in seconds.",
              "constraints": {
                "default": 86400,
                "minimum": 60,
                "maximum": 604800
              }
            },
            {
              "name": "filename",
              "type": "string",
              "required": false,
              "description": "Optional display filename.",
              "constraints": {
                "maxLength": 120
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "kind": "json",
            "content": {
              "ok": true,
              "message": "hello agent"
            },
            "ttlSeconds": 3600
          }
        },
        "exampleRequest": {
          "kind": "json",
          "content": {
            "ok": true,
            "message": "hello agent"
          },
          "ttlSeconds": 3600
        },
        "outputSchema": {
          "type": "object",
          "required": [
            "artifactUrl",
            "expiresAt"
          ],
          "properties": {
            "artifactUrl": {
              "type": "string",
              "format": "uri"
            },
            "expiresAt": {
              "type": "string",
              "format": "date-time"
            }
          }
        },
        "output": {
          "type": "object",
          "required": [
            "artifactUrl",
            "expiresAt"
          ],
          "properties": {
            "artifactUrl": {
              "type": "string",
              "format": "uri"
            },
            "expiresAt": {
              "type": "string",
              "format": "date-time"
            }
          }
        },
        "outputExample": {
          "artifactUrl": "signed hosted URL",
          "expiresAt": "2026-07-04T16:00:00.000Z",
          "bytes": 128
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/audit/agent-launch",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Launch Audit",
      "description": "Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.",
      "longDescription": "Purpose: Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nBest use: Use this when an agent needs audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: siteType, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Launch Audit. Constraints: format: uri. Constraints: format: uri.\n- siteType (optional, string): Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"siteType\": \"all\",\n  \"includeEvidence\": true\n}\n```",
      "category": "agent-readiness",
      "kind": "http-json",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "http-json",
      "shelf": "Http Json",
      "offeringId": "agent-launch-audit",
      "offering": "Agent Launch Audit",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "http-json",
        "agent-launch-audit"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Http Json",
        "Agent Launch Audit"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-launch-audit",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "http-json",
          "name": "Http Json"
        },
        "offering": {
          "id": "agent-launch-audit",
          "name": "Agent Launch Audit"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "http-json",
          "agent-launch-audit"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Http Json",
          "Agent Launch Audit"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "launch-audit",
        "mcp",
        "agent-skills",
        "x402",
        "seo"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "30000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "30000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for Agent Launch Audit. Constraints: format: uri."
          },
          "siteType": {
            "type": "string",
            "enum": [
              "all",
              "content",
              "api"
            ],
            "default": "all",
            "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\"."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "siteType",
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for Agent Launch Audit. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "siteType",
            "type": "string",
            "required": false,
            "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".",
            "constraints": {
              "enum": [
                "all",
                "content",
                "api"
              ],
              "default": "all"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "siteType": "all",
          "includeEvidence": true
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "siteType": "all",
        "includeEvidence": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "summary": {
          "score": 86,
          "verdict": "agent-ready with fixes"
        },
        "checks": [
          {
            "name": "OpenAPI",
            "status": "pass"
          },
          {
            "name": "x402 discovery",
            "status": "pass"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "siteType": "all",
                "includeEvidence": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "summary": {
                  "score": 86,
                  "verdict": "agent-ready with fixes"
                },
                "checks": [
                  {
                    "name": "OpenAPI",
                    "status": "pass"
                  },
                  {
                    "name": "x402 discovery",
                    "status": "pass"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/audit/agent-launch",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for Agent Launch Audit. Constraints: format: uri."
                      },
                      "siteType": {
                        "type": "string",
                        "enum": [
                          "all",
                          "content",
                          "api"
                        ],
                        "default": "all",
                        "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\"."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-launch-audit",
            "url": "https://agentbodega.store/api/audit/agent-launch",
            "method": "POST",
            "description": "Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.",
            "longDescription": "Purpose: Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nBest use: Use this when an agent needs audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: siteType, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Launch Audit. Constraints: format: uri. Constraints: format: uri.\n- siteType (optional, string): Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"siteType\": \"all\",\n  \"includeEvidence\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Launch Audit",
            "category": "agent-readiness",
            "kind": "http-json",
            "tags": [
              "agent-readiness",
              "launch-audit",
              "mcp",
              "agent-skills",
              "x402",
              "seo"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "siteType",
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for Agent Launch Audit. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "siteType",
                  "type": "string",
                  "required": false,
                  "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".",
                  "constraints": {
                    "enum": [
                      "all",
                      "content",
                      "api"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "siteType": "all",
                "includeEvidence": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for Agent Launch Audit. Constraints: format: uri."
                },
                "siteType": {
                  "type": "string",
                  "enum": [
                    "all",
                    "content",
                    "api"
                  ],
                  "default": "all",
                  "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\"."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.03"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.03",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/audit/agent-launch",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.03"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/audit/agent-launch",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "http-json",
          "shelf": "Http Json",
          "offeringId": "agent-launch-audit",
          "offering": "Agent Launch Audit",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "http-json",
            "agent-launch-audit"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Http Json",
            "Agent Launch Audit"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-launch-audit",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "http-json",
              "name": "Http Json"
            },
            "offering": {
              "id": "agent-launch-audit",
              "name": "Agent Launch Audit"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "http-json",
              "agent-launch-audit"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Http Json",
              "Agent Launch Audit"
            ]
          }
        },
        "description": {
          "short": "Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.",
          "full": "Purpose: Audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nBest use: Use this when an agent needs audit whether a site or API is ready for AI agents: discoverability, markdown access, OpenAPI, MCP, Agent Skills, x402 commerce, and concrete fix instructions.\nPrice: $0.03 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: siteType, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Launch Audit. Constraints: format: uri. Constraints: format: uri.\n- siteType (optional, string): Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"siteType\": \"all\",\n  \"includeEvidence\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Launch Audit. Constraints: format: uri."
            },
            "siteType": {
              "type": "string",
              "enum": [
                "all",
                "content",
                "api"
              ],
              "default": "all",
              "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Launch Audit. Constraints: format: uri."
            },
            "siteType": {
              "type": "string",
              "enum": [
                "all",
                "content",
                "api"
              ],
              "default": "all",
              "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "siteType",
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for Agent Launch Audit. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "siteType",
              "type": "string",
              "required": false,
              "description": "Site Type filter for Agent Launch Audit. Accepted values: \"all\", \"content\", \"api\". Constraints: accepted values: \"all\", \"content\", \"api\"; default: \"all\".",
              "constraints": {
                "enum": [
                  "all",
                  "content",
                  "api"
                ],
                "default": "all"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Launch Audit. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "siteType": "all",
            "includeEvidence": true
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "siteType": "all",
          "includeEvidence": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "summary": {
            "score": 86,
            "verdict": "agent-ready with fixes"
          },
          "checks": [
            {
              "name": "OpenAPI",
              "status": "pass"
            },
            {
              "name": "x402 discovery",
              "status": "pass"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/check/agent-discoverability",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Discoverability Check",
      "description": "Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.",
      "longDescription": "Purpose: Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nBest use: Use this when an agent needs check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Discoverability Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
      "category": "agent-readiness",
      "kind": "utility",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "utility",
      "shelf": "Utility",
      "offeringId": "agent-discoverability-check",
      "offering": "Agent Discoverability Check",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "utility",
        "agent-discoverability-check"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Utility",
        "Agent Discoverability Check"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-discoverability-check",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "utility",
          "name": "Utility"
        },
        "offering": {
          "id": "agent-discoverability-check",
          "name": "Agent Discoverability Check"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "utility",
          "agent-discoverability-check"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Utility",
          "Agent Discoverability Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "robots",
        "sitemap",
        "llms",
        "markdown",
        "link-headers"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for Agent Discoverability Check. Constraints: format: uri."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for Agent Discoverability Check. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeEvidence": true
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeEvidence": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "summary": {
          "score": 78
        },
        "checks": [
          {
            "name": "robots.txt",
            "status": "pass"
          },
          {
            "name": "sitemap",
            "status": "pass"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "summary": {
                  "score": 78
                },
                "checks": [
                  {
                    "name": "robots.txt",
                    "status": "pass"
                  },
                  {
                    "name": "sitemap",
                    "status": "pass"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/check/agent-discoverability",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for Agent Discoverability Check. Constraints: format: uri."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-discoverability-check",
            "url": "https://agentbodega.store/api/check/agent-discoverability",
            "method": "POST",
            "description": "Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.",
            "longDescription": "Purpose: Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nBest use: Use this when an agent needs check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Discoverability Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Discoverability Check",
            "category": "agent-readiness",
            "kind": "utility",
            "tags": [
              "agent-readiness",
              "robots",
              "sitemap",
              "llms",
              "markdown",
              "link-headers"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for Agent Discoverability Check. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for Agent Discoverability Check. Constraints: format: uri."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/check/agent-discoverability",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/check/agent-discoverability",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "utility",
          "shelf": "Utility",
          "offeringId": "agent-discoverability-check",
          "offering": "Agent Discoverability Check",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "utility",
            "agent-discoverability-check"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Utility",
            "Agent Discoverability Check"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-discoverability-check",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "utility",
              "name": "Utility"
            },
            "offering": {
              "id": "agent-discoverability-check",
              "name": "Agent Discoverability Check"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "utility",
              "agent-discoverability-check"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Utility",
              "Agent Discoverability Check"
            ]
          }
        },
        "description": {
          "short": "Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.",
          "full": "Purpose: Check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nBest use: Use this when an agent needs check robots.txt, sitemap, Link headers, markdown access, llms.txt, and AI content-signal hints for agent-facing discoverability.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Discoverability Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Discoverability Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Discoverability Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for Agent Discoverability Check. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Discoverability Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeEvidence": true
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeEvidence": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "summary": {
            "score": 78
          },
          "checks": [
            {
              "name": "robots.txt",
              "status": "pass"
            },
            {
              "name": "sitemap",
              "status": "pass"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/check/agent-protocols",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Protocol Discovery Check",
      "description": "Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.",
      "longDescription": "Purpose: Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nBest use: Use this when an agent needs check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Protocol Discovery Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
      "category": "agent-readiness",
      "kind": "utility",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "utility",
      "shelf": "Utility",
      "offeringId": "agent-protocol-check",
      "offering": "Agent Protocol Discovery Check",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "utility",
        "agent-protocol-check"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Utility",
        "Agent Protocol Discovery Check"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-protocol-check",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "utility",
          "name": "Utility"
        },
        "offering": {
          "id": "agent-protocol-check",
          "name": "Agent Protocol Discovery Check"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "utility",
          "agent-protocol-check"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Utility",
          "Agent Protocol Discovery Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "openapi",
        "mcp",
        "agent-skills",
        "oauth",
        "a2a",
        "webmcp"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "20000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "20000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeEvidence": true
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeEvidence": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "summary": {
          "score": 82
        },
        "checks": [
          {
            "name": "OpenAPI",
            "status": "pass"
          },
          {
            "name": "MCP card",
            "status": "neutral"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "summary": {
                  "score": 82
                },
                "checks": [
                  {
                    "name": "OpenAPI",
                    "status": "pass"
                  },
                  {
                    "name": "MCP card",
                    "status": "neutral"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/check/agent-protocols",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-protocol-check",
            "url": "https://agentbodega.store/api/check/agent-protocols",
            "method": "POST",
            "description": "Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.",
            "longDescription": "Purpose: Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nBest use: Use this when an agent needs check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Protocol Discovery Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Protocol Discovery Check",
            "category": "agent-readiness",
            "kind": "utility",
            "tags": [
              "agent-readiness",
              "openapi",
              "mcp",
              "agent-skills",
              "oauth",
              "a2a",
              "webmcp"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.02"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.02",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/check/agent-protocols",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.02"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/check/agent-protocols",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "utility",
          "shelf": "Utility",
          "offeringId": "agent-protocol-check",
          "offering": "Agent Protocol Discovery Check",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "utility",
            "agent-protocol-check"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Utility",
            "Agent Protocol Discovery Check"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-protocol-check",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "utility",
              "name": "Utility"
            },
            "offering": {
              "id": "agent-protocol-check",
              "name": "Agent Protocol Discovery Check"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "utility",
              "agent-protocol-check"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Utility",
              "Agent Protocol Discovery Check"
            ]
          }
        },
        "description": {
          "short": "Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.",
          "full": "Purpose: Check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nBest use: Use this when an agent needs check OpenAPI, API catalog, MCP server cards, Agent Skills, auth.md, OAuth discovery, OAuth protected-resource metadata, A2A cards, and WebMCP hints.\nPrice: $0.02 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Protocol Discovery Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for Agent Protocol Discovery Check. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Protocol Discovery Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeEvidence": true
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeEvidence": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "summary": {
            "score": 82
          },
          "checks": [
            {
              "name": "OpenAPI",
              "status": "pass"
            },
            {
              "name": "MCP card",
              "status": "neutral"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/check/agent-commerce",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Commerce Check",
      "description": "Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.",
      "longDescription": "Purpose: Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nBest use: Use this when an agent needs check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Commerce Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
      "category": "agent-readiness",
      "kind": "utility",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "utility",
      "shelf": "Utility",
      "offeringId": "agent-commerce-check",
      "offering": "Agent Commerce Check",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "utility",
        "agent-commerce-check"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Utility",
        "Agent Commerce Check"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-commerce-check",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "utility",
          "name": "Utility"
        },
        "offering": {
          "id": "agent-commerce-check",
          "name": "Agent Commerce Check"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "utility",
          "agent-commerce-check"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Utility",
          "Agent Commerce Check"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "x402",
        "mpp",
        "ucp",
        "acp",
        "commerce"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for Agent Commerce Check. Constraints: format: uri."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": true,
            "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for Agent Commerce Check. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true.",
            "constraints": {
              "default": true
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "includeEvidence": true
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "includeEvidence": true
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "summary": {
          "score": 70
        },
        "checks": [
          {
            "name": "x402",
            "status": "pass"
          },
          {
            "name": "payment hints",
            "status": "neutral"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "output": {
              "type": "json",
              "example": {
                "summary": {
                  "score": 70
                },
                "checks": [
                  {
                    "name": "x402",
                    "status": "pass"
                  },
                  {
                    "name": "payment hints",
                    "status": "neutral"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/check/agent-commerce",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for Agent Commerce Check. Constraints: format: uri."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": true,
                        "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-commerce-check",
            "url": "https://agentbodega.store/api/check/agent-commerce",
            "method": "POST",
            "description": "Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.",
            "longDescription": "Purpose: Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nBest use: Use this when an agent needs check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Commerce Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Commerce Check",
            "category": "agent-readiness",
            "kind": "utility",
            "tags": [
              "agent-readiness",
              "x402",
              "mpp",
              "ucp",
              "acp",
              "commerce"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for Agent Commerce Check. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true.",
                  "constraints": {
                    "default": true
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "includeEvidence": true
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for Agent Commerce Check. Constraints: format: uri."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": true,
                  "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/check/agent-commerce",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/check/agent-commerce",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "utility",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "utility",
          "shelf": "Utility",
          "offeringId": "agent-commerce-check",
          "offering": "Agent Commerce Check",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "utility",
            "agent-commerce-check"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Utility",
            "Agent Commerce Check"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.utility.agent-commerce-check",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "utility",
              "name": "Utility"
            },
            "offering": {
              "id": "agent-commerce-check",
              "name": "Agent Commerce Check"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "utility",
              "agent-commerce-check"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Utility",
              "Agent Commerce Check"
            ]
          }
        },
        "description": {
          "short": "Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.",
          "full": "Purpose: Check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nBest use: Use this when an agent needs check whether a site exposes machine-payable commerce metadata for x402, MPP-style OpenAPI payment hints, UCP, or ACP.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Commerce Check. Constraints: format: uri. Constraints: format: uri.\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true. Constraints: default: true.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"includeEvidence\": true\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Commerce Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Commerce Check. Constraints: format: uri."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": true,
              "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for Agent Commerce Check. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Commerce Check. Constraints: default: true.",
              "constraints": {
                "default": true
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "includeEvidence": true
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "includeEvidence": true
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "summary": {
            "score": 70
          },
          "checks": [
            {
              "name": "x402",
              "status": "pass"
            },
            {
              "name": "payment hints",
              "status": "neutral"
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/audit/agent-batch",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Readiness Batch Audit",
      "description": "Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.",
      "longDescription": "Purpose: Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nBest use: Use this when an agent needs run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: urls.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- urls (required, array): List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5. Constraints: min items: 1; max items: 5.\n- scope (optional, string): Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"urls\": [\n    \"https://example.com\",\n    \"https://example.org\"\n  ],\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```",
      "category": "agent-readiness",
      "kind": "http-json",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "http-json",
      "shelf": "Http Json",
      "offeringId": "agent-readiness-batch",
      "offering": "Agent Readiness Batch Audit",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "http-json",
        "agent-readiness-batch"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Http Json",
        "Agent Readiness Batch Audit"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-readiness-batch",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "http-json",
          "name": "Http Json"
        },
        "offering": {
          "id": "agent-readiness-batch",
          "name": "Agent Readiness Batch Audit"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "http-json",
          "agent-readiness-batch"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Http Json",
          "Agent Readiness Batch Audit"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "batch-audit",
        "launch-audit",
        "seo",
        "x402"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "50000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "50000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "urls"
        ],
        "properties": {
          "urls": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri",
              "description": "Urls item value for Agent Readiness Batch Audit. Constraints: format: uri."
            },
            "minItems": 1,
            "maxItems": 5,
            "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5."
          },
          "scope": {
            "type": "string",
            "enum": [
              "all",
              "discoverability",
              "protocols",
              "commerce"
            ],
            "default": "all",
            "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "urls"
        ],
        "optional": [
          "scope",
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "urls",
            "type": "array",
            "required": true,
            "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5.",
            "constraints": {
              "minItems": 1,
              "maxItems": 5
            },
            "items": {
              "type": "string"
            }
          },
          {
            "name": "scope",
            "type": "string",
            "required": false,
            "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
            "constraints": {
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "urls": [
            "https://example.com",
            "https://example.org"
          ],
          "scope": "all",
          "includeEvidence": false
        }
      },
      "exampleRequest": {
        "urls": [
          "https://example.com",
          "https://example.org"
        ],
        "scope": "all",
        "includeEvidence": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "summary": {
          "compared": 3,
          "best": "example.com"
        },
        "results": [
          {
            "site": "example.com",
            "score": 86
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "urls": [
                  "https://example.com",
                  "https://example.org"
                ],
                "scope": "all",
                "includeEvidence": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "summary": {
                  "compared": 3,
                  "best": "example.com"
                },
                "results": [
                  {
                    "site": "example.com",
                    "score": 86
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/audit/agent-batch",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "urls"
                    ],
                    "properties": {
                      "urls": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "uri",
                          "description": "Urls item value for Agent Readiness Batch Audit. Constraints: format: uri."
                        },
                        "minItems": 1,
                        "maxItems": 5,
                        "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5."
                      },
                      "scope": {
                        "type": "string",
                        "enum": [
                          "all",
                          "discoverability",
                          "protocols",
                          "commerce"
                        ],
                        "default": "all",
                        "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-readiness-batch",
            "url": "https://agentbodega.store/api/audit/agent-batch",
            "method": "POST",
            "description": "Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.",
            "longDescription": "Purpose: Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nBest use: Use this when an agent needs run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: urls.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- urls (required, array): List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5. Constraints: min items: 1; max items: 5.\n- scope (optional, string): Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"urls\": [\n    \"https://example.com\",\n    \"https://example.org\"\n  ],\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Readiness Batch Audit",
            "category": "agent-readiness",
            "kind": "http-json",
            "tags": [
              "agent-readiness",
              "batch-audit",
              "launch-audit",
              "seo",
              "x402"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "urls"
              ],
              "optional": [
                "scope",
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "urls",
                  "type": "array",
                  "required": true,
                  "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5.",
                  "constraints": {
                    "minItems": 1,
                    "maxItems": 5
                  },
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "name": "scope",
                  "type": "string",
                  "required": false,
                  "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
                  "constraints": {
                    "enum": [
                      "all",
                      "discoverability",
                      "protocols",
                      "commerce"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "urls": [
                  "https://example.com",
                  "https://example.org"
                ],
                "scope": "all",
                "includeEvidence": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "urls"
              ],
              "properties": {
                "urls": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uri",
                    "description": "Urls item value for Agent Readiness Batch Audit. Constraints: format: uri."
                  },
                  "minItems": 1,
                  "maxItems": 5,
                  "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5."
                },
                "scope": {
                  "type": "string",
                  "enum": [
                    "all",
                    "discoverability",
                    "protocols",
                    "commerce"
                  ],
                  "default": "all",
                  "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.05"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.05",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/audit/agent-batch",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.05"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/audit/agent-batch",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "http-json",
          "shelf": "Http Json",
          "offeringId": "agent-readiness-batch",
          "offering": "Agent Readiness Batch Audit",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "http-json",
            "agent-readiness-batch"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Http Json",
            "Agent Readiness Batch Audit"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-readiness-batch",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "http-json",
              "name": "Http Json"
            },
            "offering": {
              "id": "agent-readiness-batch",
              "name": "Agent Readiness Batch Audit"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "http-json",
              "agent-readiness-batch"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Http Json",
              "Agent Readiness Batch Audit"
            ]
          }
        },
        "description": {
          "short": "Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.",
          "full": "Purpose: Run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nBest use: Use this when an agent needs run agent-readiness checks across up to five URLs in one paid call and return comparable scores, failures, and concrete next steps.\nPrice: $0.05 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: urls.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- urls (required, array): List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5. Constraints: min items: 1; max items: 5.\n- scope (optional, string): Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"urls\": [\n    \"https://example.com\",\n    \"https://example.org\"\n  ],\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "urls"
          ],
          "properties": {
            "urls": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uri",
                "description": "Urls item value for Agent Readiness Batch Audit. Constraints: format: uri."
              },
              "minItems": 1,
              "maxItems": 5,
              "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5."
            },
            "scope": {
              "type": "string",
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all",
              "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "urls"
          ],
          "properties": {
            "urls": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uri",
                "description": "Urls item value for Agent Readiness Batch Audit. Constraints: format: uri."
              },
              "minItems": 1,
              "maxItems": 5,
              "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5."
            },
            "scope": {
              "type": "string",
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all",
              "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "urls"
          ],
          "optional": [
            "scope",
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "urls",
              "type": "array",
              "required": true,
              "description": "List of urls values for Agent Readiness Batch Audit. Constraints: min items: 1; max items: 5.",
              "constraints": {
                "minItems": 1,
                "maxItems": 5
              },
              "items": {
                "type": "string"
              }
            },
            {
              "name": "scope",
              "type": "string",
              "required": false,
              "description": "Scope filter for Agent Readiness Batch Audit. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
              "constraints": {
                "enum": [
                  "all",
                  "discoverability",
                  "protocols",
                  "commerce"
                ],
                "default": "all"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Readiness Batch Audit. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "urls": [
              "https://example.com",
              "https://example.org"
            ],
            "scope": "all",
            "includeEvidence": false
          }
        },
        "exampleRequest": {
          "urls": [
            "https://example.com",
            "https://example.org"
          ],
          "scope": "all",
          "includeEvidence": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "summary": {
            "compared": 3,
            "best": "example.com"
          },
          "results": [
            {
              "site": "example.com",
              "score": 86
            }
          ]
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/badge/agent-ready",
      "type": "http",
      "x402Version": 2,
      "serviceName": "Agent Ready Badge",
      "description": "Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.",
      "longDescription": "Purpose: Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nBest use: Use this when an agent needs generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Ready Badge. Constraints: format: uri. Constraints: format: uri.\n- scope (optional, string): Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```",
      "category": "agent-readiness",
      "kind": "http-json",
      "departmentId": "agent-readiness",
      "department": "Agent Readiness",
      "aisleId": "readiness-audits",
      "aisle": "Readiness Audits",
      "shelfId": "http-json",
      "shelf": "Http Json",
      "offeringId": "agent-ready-badge",
      "offering": "Agent Ready Badge",
      "pathIds": [
        "agent-readiness",
        "readiness-audits",
        "http-json",
        "agent-ready-badge"
      ],
      "pathLabels": [
        "Agent Readiness",
        "Readiness Audits",
        "Http Json",
        "Agent Ready Badge"
      ],
      "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-ready-badge",
      "layout": {
        "department": {
          "id": "agent-readiness",
          "name": "Agent Readiness"
        },
        "aisle": {
          "id": "readiness-audits",
          "name": "Readiness Audits"
        },
        "shelf": {
          "id": "http-json",
          "name": "Http Json"
        },
        "offering": {
          "id": "agent-ready-badge",
          "name": "Agent Ready Badge"
        },
        "pathIds": [
          "agent-readiness",
          "readiness-audits",
          "http-json",
          "agent-ready-badge"
        ],
        "pathLabels": [
          "Agent Readiness",
          "Readiness Audits",
          "Http Json",
          "Agent Ready Badge"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "agent-readiness",
        "badge",
        "svg",
        "launch-audit"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for Agent Ready Badge. Constraints: format: uri."
          },
          "scope": {
            "type": "string",
            "enum": [
              "all",
              "discoverability",
              "protocols",
              "commerce"
            ],
            "default": "all",
            "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
          },
          "includeEvidence": {
            "type": "boolean",
            "default": false,
            "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "scope",
          "includeEvidence"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for Agent Ready Badge. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "scope",
            "type": "string",
            "required": false,
            "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
            "constraints": {
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all"
            }
          },
          {
            "name": "includeEvidence",
            "type": "boolean",
            "required": false,
            "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false.",
            "constraints": {
              "default": false
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "scope": "all",
          "includeEvidence": false
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "scope": "all",
        "includeEvidence": false
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "score": 86,
        "badgeSvg": "<svg>...</svg>",
        "summary": {
          "verdict": "agent-ready"
        }
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "scope": "all",
                "includeEvidence": false
              }
            },
            "output": {
              "type": "json",
              "example": {
                "score": 86,
                "badgeSvg": "<svg>...</svg>",
                "summary": {
                  "verdict": "agent-ready"
                }
              }
            }
          },
          "routeTemplate": "/api/badge/agent-ready",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for Agent Ready Badge. Constraints: format: uri."
                      },
                      "scope": {
                        "type": "string",
                        "enum": [
                          "all",
                          "discoverability",
                          "protocols",
                          "commerce"
                        ],
                        "default": "all",
                        "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
                      },
                      "includeEvidence": {
                        "type": "boolean",
                        "default": false,
                        "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "agent-ready-badge",
            "url": "https://agentbodega.store/api/badge/agent-ready",
            "method": "POST",
            "description": "Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.",
            "longDescription": "Purpose: Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nBest use: Use this when an agent needs generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Ready Badge. Constraints: format: uri. Constraints: format: uri.\n- scope (optional, string): Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```",
            "mimeType": "application/json",
            "serviceName": "Agent Ready Badge",
            "category": "agent-readiness",
            "kind": "http-json",
            "tags": [
              "agent-readiness",
              "badge",
              "svg",
              "launch-audit"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "scope",
                "includeEvidence"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for Agent Ready Badge. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "scope",
                  "type": "string",
                  "required": false,
                  "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
                  "constraints": {
                    "enum": [
                      "all",
                      "discoverability",
                      "protocols",
                      "commerce"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "includeEvidence",
                  "type": "boolean",
                  "required": false,
                  "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false.",
                  "constraints": {
                    "default": false
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "scope": "all",
                "includeEvidence": false
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for Agent Ready Badge. Constraints: format: uri."
                },
                "scope": {
                  "type": "string",
                  "enum": [
                    "all",
                    "discoverability",
                    "protocols",
                    "commerce"
                  ],
                  "default": "all",
                  "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
                },
                "includeEvidence": {
                  "type": "boolean",
                  "default": false,
                  "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/badge/agent-ready",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/badge/agent-ready",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "agent-readiness",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "agent-readiness",
          "department": "Agent Readiness",
          "aisleId": "readiness-audits",
          "aisle": "Readiness Audits",
          "shelfId": "http-json",
          "shelf": "Http Json",
          "offeringId": "agent-ready-badge",
          "offering": "Agent Ready Badge",
          "pathIds": [
            "agent-readiness",
            "readiness-audits",
            "http-json",
            "agent-ready-badge"
          ],
          "pathLabels": [
            "Agent Readiness",
            "Readiness Audits",
            "Http Json",
            "Agent Ready Badge"
          ],
          "taxonomyPath": "agent-readiness.readiness-audits.http-json.agent-ready-badge",
          "layout": {
            "department": {
              "id": "agent-readiness",
              "name": "Agent Readiness"
            },
            "aisle": {
              "id": "readiness-audits",
              "name": "Readiness Audits"
            },
            "shelf": {
              "id": "http-json",
              "name": "Http Json"
            },
            "offering": {
              "id": "agent-ready-badge",
              "name": "Agent Ready Badge"
            },
            "pathIds": [
              "agent-readiness",
              "readiness-audits",
              "http-json",
              "agent-ready-badge"
            ],
            "pathLabels": [
              "Agent Readiness",
              "Readiness Audits",
              "Http Json",
              "Agent Ready Badge"
            ]
          }
        },
        "description": {
          "short": "Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.",
          "full": "Purpose: Generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nBest use: Use this when an agent needs generate an agent-readiness score and SVG badge for a URL using the same checks as the launch audit.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: scope, includeEvidence.\n\nAccepted fields:\n- url (required, string): Url value for Agent Ready Badge. Constraints: format: uri. Constraints: format: uri.\n- scope (optional, string): Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".\n- includeEvidence (optional, boolean): Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false. Constraints: default: false.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"scope\": \"all\",\n  \"includeEvidence\": false\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Ready Badge. Constraints: format: uri."
            },
            "scope": {
              "type": "string",
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all",
              "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for Agent Ready Badge. Constraints: format: uri."
            },
            "scope": {
              "type": "string",
              "enum": [
                "all",
                "discoverability",
                "protocols",
                "commerce"
              ],
              "default": "all",
              "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\"."
            },
            "includeEvidence": {
              "type": "boolean",
              "default": false,
              "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "scope",
            "includeEvidence"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for Agent Ready Badge. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "scope",
              "type": "string",
              "required": false,
              "description": "Scope filter for Agent Ready Badge. Accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\". Constraints: accepted values: \"all\", \"discoverability\", \"protocols\", \"commerce\"; default: \"all\".",
              "constraints": {
                "enum": [
                  "all",
                  "discoverability",
                  "protocols",
                  "commerce"
                ],
                "default": "all"
              }
            },
            {
              "name": "includeEvidence",
              "type": "boolean",
              "required": false,
              "description": "Set true to enable include evidence behavior for Agent Ready Badge. Constraints: default: false.",
              "constraints": {
                "default": false
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "scope": "all",
            "includeEvidence": false
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "scope": "all",
          "includeEvidence": false
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "score": 86,
          "badgeSvg": "<svg>...</svg>",
          "summary": {
            "verdict": "agent-ready"
          }
        }
      },
      "configured": true
    },
    {
      "resource": "https://agentbodega.store/api/package/x402-directory",
      "type": "http",
      "x402Version": 2,
      "serviceName": "x402 Directory Listing Pack",
      "description": "Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.",
      "longDescription": "Purpose: Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nBest use: Use this when an agent needs build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: name, tags.\n\nAccepted fields:\n- url (required, string): Url value for x402 Directory Listing Pack. Constraints: format: uri. Constraints: format: uri.\n- name (optional, string): Name value for x402 Directory Listing Pack. Constraints: max length: 80. Constraints: max length: 80.\n- tags (optional, array): List of tags values for x402 Directory Listing Pack. Constraints: max items: 12. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"name\": \"Example x402 API\",\n  \"tags\": [\n    \"x402\",\n    \"agents\"\n  ]\n}\n```",
      "category": "x402-tools",
      "kind": "http-json",
      "departmentId": "x402-tools",
      "department": "x402 Tools",
      "aisleId": "payment-discovery",
      "aisle": "Payment Discovery",
      "shelfId": "directory-packaging",
      "shelf": "Directory Packaging",
      "offeringId": "x402-directory-pack",
      "offering": "x402 Directory Listing Pack",
      "pathIds": [
        "x402-tools",
        "payment-discovery",
        "directory-packaging",
        "x402-directory-pack"
      ],
      "pathLabels": [
        "x402 Tools",
        "Payment Discovery",
        "Directory Packaging",
        "x402 Directory Listing Pack"
      ],
      "taxonomyPath": "x402-tools.payment-discovery.directory-packaging.x402-directory-pack",
      "layout": {
        "department": {
          "id": "x402-tools",
          "name": "x402 Tools"
        },
        "aisle": {
          "id": "payment-discovery",
          "name": "Payment Discovery"
        },
        "shelf": {
          "id": "directory-packaging",
          "name": "Directory Packaging"
        },
        "offering": {
          "id": "x402-directory-pack",
          "name": "x402 Directory Listing Pack"
        },
        "pathIds": [
          "x402-tools",
          "payment-discovery",
          "directory-packaging",
          "x402-directory-pack"
        ],
        "pathLabels": [
          "x402 Tools",
          "Payment Discovery",
          "Directory Packaging",
          "x402 Directory Listing Pack"
        ]
      },
      "tags": [
        "x402",
        "agent-tools",
        "x402",
        "directory-listing",
        "marketplace",
        "bazaar",
        "discovery"
      ],
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "10000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USD Coin",
            "version": "2"
          }
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "10000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "version": "spl",
            "decimals": 6
          }
        }
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri."
          },
          "name": {
            "type": "string",
            "maxLength": 80,
            "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Tags item value for x402 Directory Listing Pack."
            },
            "maxItems": 12,
            "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12."
          }
        },
        "additionalProperties": false
      },
      "inputContract": {
        "contentType": "application/json",
        "required": [
          "url"
        ],
        "optional": [
          "name",
          "tags"
        ],
        "fields": [
          {
            "name": "url",
            "type": "string",
            "required": true,
            "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri.",
            "constraints": {
              "format": "uri"
            }
          },
          {
            "name": "name",
            "type": "string",
            "required": false,
            "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80.",
            "constraints": {
              "maxLength": 80
            }
          },
          {
            "name": "tags",
            "type": "array",
            "required": false,
            "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12.",
            "constraints": {
              "maxItems": 12
            },
            "items": {
              "type": "string"
            }
          }
        ],
        "additionalProperties": false,
        "example": {
          "url": "https://example.com",
          "name": "Example x402 API",
          "tags": [
            "x402",
            "agents"
          ]
        }
      },
      "exampleRequest": {
        "url": "https://example.com",
        "name": "Example x402 API",
        "tags": [
          "x402",
          "agents"
        ]
      },
      "outputSchema": {
        "type": "object",
        "additionalProperties": true
      },
      "outputExample": {
        "listing": {
          "payableResourceCount": 12,
          "score": 91
        },
        "files": [
          {
            "name": "openapi.json"
          },
          {
            "name": "x402 discovery"
          }
        ]
      },
      "extensions": {
        "bazaar": {
          "info": {
            "input": {
              "type": "http",
              "method": "POST",
              "bodyType": "json",
              "body": {
                "url": "https://example.com",
                "name": "Example x402 API",
                "tags": [
                  "x402",
                  "agents"
                ]
              }
            },
            "output": {
              "type": "json",
              "example": {
                "listing": {
                  "payableResourceCount": 12,
                  "score": 91
                },
                "files": [
                  {
                    "name": "openapi.json"
                  },
                  {
                    "name": "x402 discovery"
                  }
                ]
              }
            }
          },
          "routeTemplate": "/api/package/x402-directory",
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "input": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "http"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST"
                    ]
                  },
                  "bodyType": {
                    "type": "string",
                    "enum": [
                      "json"
                    ]
                  },
                  "body": {
                    "type": "object",
                    "required": [
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri."
                      },
                      "name": {
                        "type": "string",
                        "maxLength": 80,
                        "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80."
                      },
                      "tags": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "Tags item value for x402 Directory Listing Pack."
                        },
                        "maxItems": 12,
                        "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12."
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "type",
                  "method",
                  "bodyType",
                  "body"
                ],
                "additionalProperties": false
              },
              "output": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "example": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "type",
                  "example"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "input",
              "output"
            ],
            "additionalProperties": false
          },
          "resource": {
            "key": "x402-directory-pack",
            "url": "https://agentbodega.store/api/package/x402-directory",
            "method": "POST",
            "description": "Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.",
            "longDescription": "Purpose: Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nBest use: Use this when an agent needs build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: name, tags.\n\nAccepted fields:\n- url (required, string): Url value for x402 Directory Listing Pack. Constraints: format: uri. Constraints: format: uri.\n- name (optional, string): Name value for x402 Directory Listing Pack. Constraints: max length: 80. Constraints: max length: 80.\n- tags (optional, array): List of tags values for x402 Directory Listing Pack. Constraints: max items: 12. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"name\": \"Example x402 API\",\n  \"tags\": [\n    \"x402\",\n    \"agents\"\n  ]\n}\n```",
            "mimeType": "application/json",
            "serviceName": "x402 Directory Listing Pack",
            "category": "x402-tools",
            "kind": "http-json",
            "tags": [
              "x402",
              "directory-listing",
              "marketplace",
              "bazaar",
              "discovery"
            ],
            "inputContract": {
              "contentType": "application/json",
              "required": [
                "url"
              ],
              "optional": [
                "name",
                "tags"
              ],
              "fields": [
                {
                  "name": "url",
                  "type": "string",
                  "required": true,
                  "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri.",
                  "constraints": {
                    "format": "uri"
                  }
                },
                {
                  "name": "name",
                  "type": "string",
                  "required": false,
                  "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80.",
                  "constraints": {
                    "maxLength": 80
                  }
                },
                {
                  "name": "tags",
                  "type": "array",
                  "required": false,
                  "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12.",
                  "constraints": {
                    "maxItems": 12
                  },
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "additionalProperties": false,
              "example": {
                "url": "https://example.com",
                "name": "Example x402 API",
                "tags": [
                  "x402",
                  "agents"
                ]
              }
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri."
                },
                "name": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80."
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "description": "Tags item value for x402 Directory Listing Pack."
                  },
                  "maxItems": 12,
                  "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12."
                }
              },
              "additionalProperties": false
            },
            "outputSchema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "metadata": {
        "price": {
          "mode": "fixed",
          "currency": "USD",
          "amount": "0.01"
        },
        "balanceModel": {
          "mode": "per_call_x402",
          "sourceOfTruth": "blockchain_settlement"
        },
        "paymentSurfaces": {
          "x402": {
            "protocol": "x402",
            "discovery": "https://agentbodega.store/.well-known/x402",
            "sourceOfTruth": "blockchain_settlement"
          },
          "mpp": {
            "protocol": "mpp",
            "status": "configured",
            "enabled": true,
            "method": "evm",
            "intent": "charge",
            "amount": "0.01",
            "currency": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "network": "eip155:8453",
            "recipient": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
            "challengeHeader": "WWW-Authenticate",
            "credentialHeader": "Authorization",
            "receiptHeader": "Payment-Receipt",
            "discovery": "https://agentbodega.store/openapi.json",
            "requirements": {
              "secret": "MPP_SECRET_KEY with at least 32 bytes",
              "asset": "Base USDC via x402 facilitator settlement"
            }
          },
          "l402": {
            "protocol": "l402",
            "scheme": "L402",
            "network": "bitcoin-lightning",
            "status": "discovery_only",
            "resource": "https://agentbodega.store/api/package/x402-directory",
            "price": {
              "mode": "fixed",
              "currency": "USD",
              "amount": "0.01"
            },
            "quote": {
              "unit": "sats",
              "amount": null,
              "source": "not_configured"
            },
            "challenge": {
              "method": "POST",
              "url": "https://agentbodega.store/api/package/x402-directory",
              "header": "WWW-Authenticate",
              "headerFormat": "L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"",
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "credentialHeader": "Authorization",
              "credentialFormat": "L402 <macaroon>:<preimage>"
            },
            "gateway": {
              "mode": "trusted_reverse_proxy",
              "enabled": false,
              "issuer": "https://agentbodega-l402-gateway-2tupfjztia-uc.a.run.app/",
              "proofHeader": "x-agentbodega-l402-gateway",
              "requiredSecretEnv": "AGENTBODEGA_L402_GATEWAY_TOKEN",
              "acceptedMetadataHeaders": [
                "x-agentbodega-l402-payment-hash",
                "x-agentbodega-l402-preimage-hash",
                "x-agentbodega-l402-invoice-hash",
                "x-agentbodega-l402-amount-sats",
                "x-agentbodega-l402-amount-msats",
                "x-agentbodega-l402-macaroon-id",
                "x-agentbodega-l402-caveats"
              ],
              "forbiddenForwardHeaders": [
                "authorization"
              ],
              "note": "The L402 issuer/proxy must verify the macaroon and preimage before forwarding. Forward the shared proof header and non-sensitive hashes only; do not forward raw macaroons, invoices, or preimages to the Worker."
            },
            "discovery": "https://agentbodega.store/.well-known/l402-services",
            "settlement": {
              "sourceOfTruth": "lightning_invoice_preimage",
              "verification": "not_enabled_in_worker"
            },
            "note": "L402 is advertised for discovery and client handoff. Live AgentBodega fulfillment is currently verified through x402 until a Lightning invoice issuer is configured."
          }
        },
        "category": "x402-tools",
        "kind": "http-json",
        "taxonomy": {
          "departmentId": "x402-tools",
          "department": "x402 Tools",
          "aisleId": "payment-discovery",
          "aisle": "Payment Discovery",
          "shelfId": "directory-packaging",
          "shelf": "Directory Packaging",
          "offeringId": "x402-directory-pack",
          "offering": "x402 Directory Listing Pack",
          "pathIds": [
            "x402-tools",
            "payment-discovery",
            "directory-packaging",
            "x402-directory-pack"
          ],
          "pathLabels": [
            "x402 Tools",
            "Payment Discovery",
            "Directory Packaging",
            "x402 Directory Listing Pack"
          ],
          "taxonomyPath": "x402-tools.payment-discovery.directory-packaging.x402-directory-pack",
          "layout": {
            "department": {
              "id": "x402-tools",
              "name": "x402 Tools"
            },
            "aisle": {
              "id": "payment-discovery",
              "name": "Payment Discovery"
            },
            "shelf": {
              "id": "directory-packaging",
              "name": "Directory Packaging"
            },
            "offering": {
              "id": "x402-directory-pack",
              "name": "x402 Directory Listing Pack"
            },
            "pathIds": [
              "x402-tools",
              "payment-discovery",
              "directory-packaging",
              "x402-directory-pack"
            ],
            "pathLabels": [
              "x402 Tools",
              "Payment Discovery",
              "Directory Packaging",
              "x402 Directory Listing Pack"
            ]
          }
        },
        "description": {
          "short": "Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.",
          "full": "Purpose: Build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nBest use: Use this when an agent needs build a compact listing payload for x402 directories: service name, discovery links, payment metadata, endpoint counts, tags, and readiness warnings.\nPrice: $0.01 per successful paid call. Direct Base x402 authorization is verified before execution and settled only after successful fulfillment.\nFulfillment: Managed AgentBodega HTTP+JSON endpoint. Upstream provider details are intentionally not disclosed unless the response explicitly includes managed source metadata.\n\nInput: send a JSON request body.\nRequired fields: url.\nOptional fields: name, tags.\n\nAccepted fields:\n- url (required, string): Url value for x402 Directory Listing Pack. Constraints: format: uri. Constraints: format: uri.\n- name (optional, string): Name value for x402 Directory Listing Pack. Constraints: max length: 80. Constraints: max length: 80.\n- tags (optional, array): List of tags values for x402 Directory Listing Pack. Constraints: max items: 12. Constraints: max items: 12.\n\nExample request body:\n```json\n{\n  \"url\": \"https://example.com\",\n  \"name\": \"Example x402 API\",\n  \"tags\": [\n    \"x402\",\n    \"agents\"\n  ]\n}\n```"
        },
        "inputSchema": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri."
            },
            "name": {
              "type": "string",
              "maxLength": 80,
              "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80."
            },
            "tags": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Tags item value for x402 Directory Listing Pack."
              },
              "maxItems": 12,
              "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12."
            }
          },
          "additionalProperties": false
        },
        "input": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri."
            },
            "name": {
              "type": "string",
              "maxLength": 80,
              "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80."
            },
            "tags": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Tags item value for x402 Directory Listing Pack."
              },
              "maxItems": 12,
              "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12."
            }
          },
          "additionalProperties": false
        },
        "inputContract": {
          "contentType": "application/json",
          "required": [
            "url"
          ],
          "optional": [
            "name",
            "tags"
          ],
          "fields": [
            {
              "name": "url",
              "type": "string",
              "required": true,
              "description": "Url value for x402 Directory Listing Pack. Constraints: format: uri.",
              "constraints": {
                "format": "uri"
              }
            },
            {
              "name": "name",
              "type": "string",
              "required": false,
              "description": "Name value for x402 Directory Listing Pack. Constraints: max length: 80.",
              "constraints": {
                "maxLength": 80
              }
            },
            {
              "name": "tags",
              "type": "array",
              "required": false,
              "description": "List of tags values for x402 Directory Listing Pack. Constraints: max items: 12.",
              "constraints": {
                "maxItems": 12
              },
              "items": {
                "type": "string"
              }
            }
          ],
          "additionalProperties": false,
          "example": {
            "url": "https://example.com",
            "name": "Example x402 API",
            "tags": [
              "x402",
              "agents"
            ]
          }
        },
        "exampleRequest": {
          "url": "https://example.com",
          "name": "Example x402 API",
          "tags": [
            "x402",
            "agents"
          ]
        },
        "outputSchema": {
          "type": "object",
          "additionalProperties": true
        },
        "output": {
          "type": "object",
          "additionalProperties": true
        },
        "outputExample": {
          "listing": {
            "payableResourceCount": 12,
            "score": 91
          },
          "files": [
            {
              "name": "openapi.json"
            },
            {
              "name": "x402 discovery"
            }
          ]
        }
      },
      "configured": true
    }
  ],
  "settlement": {
    "network": "eip155:8453",
    "asset": "USDC",
    "assetAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "facilitator": "https://api.cdp.coinbase.com/platform/v2/x402",
    "payTo": "0xe8799C2dedA78ECcEB329D1E8FE9F110bf55E4F8",
    "alternatives": [
      {
        "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
        "asset": "USDC",
        "assetAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "payTo": "4tWJRwNyhGr88QTiV2yzMoGsaxZiCSRDepf9JTdBEgyi",
        "gateway": "pay.sh"
      }
    ]
  },
  "seeAlso": [
    "https://agentbodega.store/api/directory",
    "https://agentbodega.store/api/taxonomy",
    "https://agentbodega.store/api/storefront",
    "https://agentbodega.store/openapi.json",
    "https://agentbodega.store/openapi.summary.json",
    "https://agentbodega.store/registry/index.json",
    "https://agentbodega.store/llms.txt"
  ]
}